我想在 Python 中使用 Plotly 创建动态图表 -> 通过图表本身中的按钮更改样式选项。因此,plotly提供了按钮或下拉菜单(updatemenus)。我当前的问题是,我想根据哪个按钮处于活动状态来隐藏其中一些按钮。
我的示例是一个图,我可以将图形从线条更改为标记(第一个按钮集),并作为线条的特殊选项,我提供点线、虚线和实线(第二个按钮集)。 显然,当“标记”处于活动状态时提供第二个按钮集是没有意义的。所以我想隐藏第二组。但直到现在我还没有找到解决办法。 我正在使用离线版本的plotly。
如有任何建议,我将不胜感激,谢谢。
我的小例子:
import plotly as py
import plotly.graph_objs as go
x_ = [1, 2, 3, 4, 5, 6, 7, 8 , 9, 10]
y_ = [1, 1.2, 1.4, 1.5, 1.6, 1.5, 1.4, 1.4, 1.35, 1.3]
trace_ = go.Scatter(
x = x_,
y = y_,
mode = "lines",
line = dict(
dash = "dot"
)
)
layout_ = go.Layout(
autosize = True
)
updatemenus_ = list([
dict(
buttons = list([
dict(
args=['mode', 'lines'],
label='Lines',
method='restyle'
),
dict(
args=['mode', 'markers'],
label='Markers',
method='restyle'
)
]),
direction = 'left',
pad = {'r': 10, 't': 10},
showactive = True,
type = 'buttons',
x = 0.1,
xanchor = 'right',
y = 1.1,
yanchor = 'top'
),
dict(
buttons = list([
dict(
args=['line', {'dash': 'dot'}],
label='Dotted Line',
method='restyle'
),
dict(
args=['line', {'dash': 'dash'}],
label='Dashed Line',
method='restyle'
),
dict(
args=['line', {'dash': 'solid'}],
label='Solid Line',
method='restyle'
)
]),
direction = 'right',
pad = {'r': 10, 't': 10},
showactive = True,
type = 'buttons',
x = 0.5,
xanchor = 'right',
y = 1.1,
yanchor = 'top'
),
])
layout_['updatemenus'] = updatemenus_
fig = dict(data=[trace_], layout=layout_)
py.offline.plot(fig, filename='MiniExample.html')
如果要更新按钮的可见性,则需要依赖“Dash”模块。 但是,在当前示例中,我建议简单地使用“下拉”类型在图表的不同可视化之间切换。 根据您的需要提供一个简单示例:
x_ = [1, 2, 3, 4, 5, 6, 7, 8 , 9, 10]
y_ = [1, 1.2, 1.4, 1.5, 1.6, 1.5, 1.4, 1.4, 1.35, 1.3]
f = go.Scatter(
x = x_,
y = y_,
mode = "markers",
)
fig = go.Figure(f)
buttons = [{"method":'restyle', "args": [{"mode": "markers"}], "label": "Markers"},
{"method": "restyle", "args":[{"mode": "lines", "line.dash": "solid"}], "label": "solid_line"},
{"method": "restyle", "args":[{"mode": "lines", "line.dash": "dot"}], "label": "dotted_line"},
{"method": "restyle", "args":[{"mode": "lines", "line.dash": "dash"}], "label": "dashed_line"},
]
updatemenus = [{"type": "dropdown", "buttons":buttons, "x":0.12, "y": 1.2, "showactive":True}]
annotations=[dict(text="Graph format:", showarrow=False, x=1, y=1.3, yref="paper", align="right")]
fig.update_layout(updatemenus=updatemenus, annotations=annotations)
fig.show()