繁体   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