如何在plotly python中隐藏更新菜单中的按钮

问题描述 投票:0回答:1

我想在 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')
python-3.x plotly
1个回答
0
投票

如果要更新按钮的可见性,则需要依赖“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()

我希望你觉得它有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.