pandas 如何从plotly中使用烛台制作动画(Python)

lvmkulzt  于 2023-05-27  发布在  Python
关注(0)|答案(2)|浏览(135)

尊敬的
我可以用烛台从图中画出图。然而,在一个循环中,如何使这些图形不是一个在另一个下面创建,而是全部在一个图形中?创建动画效果。请参阅下面的示例,其中我连续绘制了5天前的蜡烛,遍历了整个DataFrame。

import plotly.graph_objects as go
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

#df
#i         Date   AAPL.Open   AAPL.High    AAPL.Low  AAPL.Close  AAPL.Volume  \
#0    2015-02-17  127.489998  128.880005  126.919998  127.830002     63152400   
#1    2015-02-18  127.629997  128.779999  127.449997  128.720001     44891700  
#....

for index, row in df.iterrows():

    FiveDaysBlock = df.iloc[index:(index+5),]

    fig = go.Figure(data=[go.Candlestick(
    x=FiveDaysBlock['Date'],
    open=FiveDaysBlock['AAPL.Open'], high=FiveDaysBlock['AAPL.High'],
    low=FiveDaysBlock['AAPL.Low'], close=FiveDaysBlock['AAPL.Close']
    )])
    fig.update_layout(xaxis_rangeslider_visible=False)
    fig.update_layout(autosize=False,width=700, height=250, margin=dict( l=1,r=1,b=20,  t=20, pad=2 ) )
    fig.update_xaxes(rangebreaks=[dict(bounds=["sat", "mon"])])
    fig.show()

See how the figure is generated under the other
谢谢你

o4hqfura

o4hqfura1#

这些天我一直在尝试做同样的事情,最后我做到了这一点:

这里的代码:
https://github.com/matiaslee/candlestick_animation_with_plotly/blob/main/candlestick_animation_with_plotly.ipynb
最好的!

mhd8tkvw

mhd8tkvw2#

不幸的是,基于this open issue,似乎x轴和y轴的自动缩放被go.Candlestick()对象禁用了,所以轴不能随着动画的进行而正确缩放。

import plotly.graph_objects as go
import datetime as dt
import pandas as pd
from ipywidgets import widgets
from IPython.display import display

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

#df
#i         Date   AAPL.Open   AAPL.High    AAPL.Low  AAPL.Close  AAPL.Volume  \
#0    2015-02-17  127.489998  128.880005  126.919998  127.830002     63152400   
#1    2015-02-18  127.629997  128.779999  127.449997  128.720001     44891700  
#....

# it might be useful to convert the Dates to datetime objects
df['Date'] = pd.to_datetime(df['Date'])

candlestick_data = []
for index, row in df.iterrows():
    FiveDaysBlock = df.iloc[index:(index+5),]
    candlestick_data.append(go.Candlestick(x=FiveDaysBlock['Date'],
        open=FiveDaysBlock['AAPL.Open'], high=FiveDaysBlock['AAPL.High'],
        low=FiveDaysBlock['AAPL.Low'], close=FiveDaysBlock['AAPL.Close'])
    )

def update_fig(i):
    fig = go.Figure(data=candlestick_data[i])

    fig.update_layout(xaxis_rangeslider_visible=False)
    fig.update_layout(transition_duration=2000)
    fig.update_layout(autosize=True,width=700, height=250, margin=dict(l=1,r=1,b=20,t=20,pad=2))

# this doesn't quite work but it's close
interact(update_fig, i=100)
fig.show()

相关问题