簡體   English   中英

python plotly - 在子圖中使用下拉菜單更新數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM