[英]python plotly - update data with dropdown menu in subplots
我能夠使用更新數據的菜單生成以下簡單圖:
import pandas as pd
df = pd.DataFrame({'x':[1,2,3,4,5,6,7,8,9], 'y':[2,6,4,7,3,10,1,5,8], 't':[1,1,1,2,2,2,3,3,3]})
df
data = {t : df.query('t == @t') for t in df.t.unique()}
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter(x=data[1]['x'], y=data[1]['y']))
buttons=[]
for df in data.keys():
buttons.append(dict(method='restyle',
label=str(df),
visible=True,
args=[{'y':[data[df]['y'].values],
'x':[data[df]['x'].values]},]
)
)
updatemenu=[]
your_menu=dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']=buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()
但是,如果我想要兩個子圖,每個子圖訪問不同的數據並使用菜單更新怎么辦?
df1 = pd.DataFrame({'x':[1,2,3,4,5,6,7,8,9], 'y':[2,6,4,7,3,10,1,5,8], 't':[1,1,1,2,2,2,3,3,3]})
df2 = pd.DataFrame({'x':[1,2,3,4,5,6,7,8,9], 'y':[6,1,0,5,3,3,5,4,11], 't':[1,1,1,2,2,2,3,3,3]})
data1 = {t : df1.query('t == @t') for t in df1.t.unique()}
data2 = {t : df2.query('t == @t') for t in df2.t.unique()}
fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
fig.add_trace(go.Scatter(x=data1[1]['x'], y=data1[1]['y']), row=1, col=1)
fig.add_trace(go.Scatter(x=data2[1]['x'], y=data2[1]['y']), row=2, col=1)
我錯過了控制菜單的其余代碼。 能否請你幫忙?
我找到了一個解決方案:
fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
fig.add_trace(go.Scatter(x=data1[1]['x'], y=data1[1]['y']), row=1, col=1)
fig.add_trace(go.Scatter(x=data2[1]['x'], y=data2[1]['y']), row=2, col=1)
fig.add_trace(go.Scatter(x=data1[2]['x'], y=data1[2]['y'], visible=False), row=1, col=1)
fig.add_trace(go.Scatter(x=data2[2]['x'], y=data2[2]['y'], visible=False), row=2, col=1)
fig.add_trace(go.Scatter(x=data1[3]['x'], y=data1[3]['y'], visible=False), row=1, col=1)
fig.add_trace(go.Scatter(x=data2[3]['x'], y=data2[3]['y'], visible=False), row=2, col=1)
buttons=[]
for df in data1.keys():
buttons.append(dict(method='update',
label=str(df),
visible=True,
args=[{'visible': list(sum([(True,True) if i == df else (False,False) for i in range(1,4)], ()))}]
)
)
updatemenu=[]
your_menu=dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']=buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.