Фон
У меня есть набор финансовых данных, которые я пытаюсь проанализировать и отобразить графически. Данные состоят из данных о ценах высокого разрешения для ряда товарных контрактов. Эти контракты определяются наличием как продукта (фактический товар, о котором идет речь), так и тенора (указанная дата поставки для контракта). Таким образом, комбинация продукта и тенора дает полностью определенный товарный контракт, который имеет текущую рыночную цену, следующим образом
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, но я наткнулся на кирпичную стену о том, как это сделать.
Любые предложения будут очень признательны.