3D полярная диаграмма в Python - PullRequest
1 голос
/ 10 апреля 2020

Фон

У меня есть набор финансовых данных, которые я пытаюсь проанализировать и отобразить графически. Данные состоят из данных о ценах высокого разрешения для ряда товарных контрактов. Эти контракты определяются наличием как продукта (фактический товар, о котором идет речь), так и тенора (указанная дата поставки для контракта). Таким образом, комбинация продукта и тенора дает полностью определенный товарный контракт, который имеет текущую рыночную цену, следующим образом

     T              Product 1                    Product 2           
 --------- ---------------------------- ---------------------------- 
  Tenor 1   $ Commodity contract price   $ Commodity contract price  
            for product 1 at tenor 1     for product 2 at tenor 1    
  Tenor 2   $ Commodity contract price   $ Commodity contract price  
            for product 1 at tenor 2     for product 1 at tenor 2    

Используя некоторые примеры данных, рассмотрим сентябрьские, октябрьские и ноябрьские контракты для двух сортов сырой нефти, Brent и WTI, и текущие рыночные цены дали бы нам что-то вроде этого.

      T        Brent      WTI    
 ----------- --------- --------- 
  Sep 2020    $37.25    $33.40   
  Oct 2020    $38.10    $33.75   
  Nov 2020    $38.85    $34.15   

Но, конечно, эти цены не устоявшиеся c, поскольку они движутся с рыночными силами, поэтому у нас есть снимок этих цен каждые t секунд. Скажем, вышеупомянутое - наша отправная точка, но при t + 1 цены Brent переместились на доллар, а WTI на 50 c, поэтому наши цены теперь выглядят так:

    T + 1      Brent      WTI    
 ----------- --------- --------- 
  Sep 2020    $38.25    $33.90   
  Oct 2020    $39.10    $34.25   
  Nov 2020    $39.85    $34.65    

В общем, это структура набор данных, хотя объем, конечно, гораздо больше.

Что я пытаюсь сделать и как далеко я продвинулся

У меня есть конкретная c визуализация этих данных (или их подмножеств), которыми я был работает навстречу. Я пытаюсь создать то, что я бы назвал трехмерной или экструдированной полярной диаграммой, которая имела бы значения контракта для различных продуктов, поскольку расстояние от центра полярной диаграммы простиралось бы вдоль оси Z, чтобы представить различные теноры, и что будет отображать изменение стоимости контракта с течением времени. Я добился 2/3 от этого, используя функцию полярной диаграммы ploty express, чтобы создать двухмерную анимированную полярную диаграмму, которая отображает контрактные значения для 6 продуктов на 1 тенор с течением времени. Следующие два изображения показывают два кадра из этого графика

Контрактная цена июня 14 для Brent, WTI, барж, 180, 380, G C на дату 2014-02-14

Контрактная цена июня 14 для Brent, WTI, барж, 180, 380, G C на дату 2014-03-27

Однако, насколько я могу судить эта функция не может быть расширена до 3d, поэтому я думаю, что мне нужно запустить fre sh. Диаграмма того, чего я пытаюсь достичь, выглядит следующим образом:

Желаемый результат

Я стремлюсь к результату, очень похожему на очень базовый c Streamtube ( см. https://plotly.com/python/streamtube-plot/?_ga=2.134282552.895284899.1586457324-1038545846.1585071729 и https://medium.com/plotly/streamtubes-in-plotly-with-python-and-r-a30216ef20a3), но форма поперечного сечения потоковой трубки, кажется, всегда имеет фиксированный радиус для каждой точки от центра, не меняясь, как в моем случай использования, так что я не верю, что смогу использовать эту встроенную функцию. Кроме того, они работают с использованием векторных полей для рисования графика, поэтому для получения правильных входных данных потребуется некоторая сложная и бесполезная обратная инженерия, которая указывает мне, что это неправильный маршрут. Я считаю, что моя лучшая ставка - использовать контурные карты в matplotlib или ploty, но я наткнулся на кирпичную стену о том, как это сделать.

Любые предложения будут очень признательны.

...