这是 Plotly 的后续问题:Plotly:更新菜单的按钮如何真正工作?
考虑由下面的代码片段生成的下图:
阴谋:
代码:
# imports
import plotly.graph_objs as go
import pandas as pd
import numpy as np
# data
df1 = pd.DataFrame({'index': ['1','2','3'], 'A': [10,10,12], 'B': [11,11,11]})
df2 = pd.DataFrame({'index': ['1','2','3'], 'A': [10,10,10], 'B': [11,11,12]})
# plotly figure setup
fig=go.Figure()
fig.add_trace(go.Scatter(x=df1['index'], y=df1['A'], mode='lines'))
fig.add_trace(go.Scatter(x=df1['index'], y=df1['B'], mode='lines'))
f=fig.to_dict()
#fig.show()
buttons=list([dict(args=[{'y':[df1['A'],df1['B']]}],
label="df1",
method="restyle"
),
dict(args=[{'y':[df2['A'], df2['B']]}],
label="df2",
method="restyle"
)
])
fig.update_layout(
updatemenus=[
go.layout.Updatemenu(
buttons=buttons,
direction="down",
pad={"r": 10, "t": 10},
showactive=True,
x=-0.25,
xanchor="left",
y=1,
yanchor="top"
),
]
)
fig.show()
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,我'y'使用按钮 和 更新值dict(args=[{'y':[df2['A'], df2['B']]}]。这将为图中指定的两条迹线分配新值,如下所示fig-to_dict:
'data': [{'mode': 'lines',
'x': array(['1', '2', '3'], dtype=object),
'y': array([10, 10, 12], dtype=int64),
'type': 'scatter'},
{'mode': 'lines',
'x': array(['1', '2', '3'], dtype=object),
'y': array([11, 11, 11], dtype=int64),
'type': 'scatter'}]
Run Code Online (Sandbox Code Playgroud)
由于我已将列表分配[df2['A'], df2['B']]给'y',因此plotly 知道我打算更新'y'上面代码片段中的两个实例。但是在按钮和更新菜单的上下文中,有没有一种方法可以指定要 'y'更新的内容(换句话说:特定的跟踪或线路)。如果我只分配一个引用(在本例中为数组或 pandas 数据帧),则两条跟踪将显示相同的值。因此更改以下部分:
args=[{'y':[df2['A'], df2['B']]}]
Run Code Online (Sandbox Code Playgroud)
...有了这个:
args=[{'y':[df2['A']]}]
Run Code Online (Sandbox Code Playgroud)
...单击后将生成以下图df2:
我真的很想保持所有未指定的'y'和痕迹不变。
感谢您的任何建议!
nic*_*ten 10
args在为每个传递的列表中button,您可以在字典后面添加一个整数来指示要更新的跟踪。例如,以下内容将仅更新第一个跟踪(即索引 = 0 处的跟踪)
buttons=list([dict(args=[{'y':[df1['A'],df1['B']]}, [0]], # note the `, [0]` here!
label="df1",
method="restyle"
),
dict(args=[{'y':[df2['A'], df2['B']]}, [0], # note the `, [0]` here!
label="df2",
method="restyle"
)
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8538 次 |
| 最近记录: |