在 Python 中的 Plotly 散点图中使用按钮切换网格

Toggling Grid with Buttons in a Plotly Scatter graph in Python

我正在尝试在 Plotly 中制作一个散点图,其中包含一个按钮,可以在现场切换 X 和 Y 网格线。我正在使用这段代码,但是当我点击按钮时,网格线没有任何反应。

buttons = [dict (method='update', label="Grid ON", args=[{'xaxes' : {'grid' : {'showgrid': True}}}]),
           dict (method='update', label="Grid OFF", args=[{'xaxes' : {'grid' : {'showgrid': False}}}] ),
                 ]
           

fig.update_layout(
            updatemenus=[{'buttons':buttons}]
).update_xaxes(showgrid=True, gridwidth=2, gridcolor='LightPink',
                         tickmode='linear',
                         tick0 = 0,
                         dtick = 60,
                         range = [0, 2500]
              ).update_yaxes(showgrid=True, gridwidth=2, gridcolor='LightPink',
                                      # tickmode='linear',
                                      # tick0=0,
                                      dtick=0.1,
                                      )
  • 主要问题是您使用了错误的方法。应该是relayout
  • 存在一些微妙的问题,其中更多的只是可见性需要更新
  • 我总是喜欢做一个列表理解来构建updatemenus结构以避免copy-paste类似代码
import plotly.express as px
import numpy as np

fig = px.scatter(x=np.linspace(1, 2500, 20), y=np.random.uniform(0, 1, 20))

buttons = [
    {
        "method": "relayout",
        "label": l,
        "args": [
            {
                "xaxis": {
                    "showgrid": s,
                    "gridcolor": "LightPink",
                    "dtick": 60,
                    "tick0": 0,
                },
                "yaxis": {"showgrid": s, "gridcolor": "LightPink", "dtick": 0.1},
            }
        ],
    }
    for l, s in [("Grid ON", True), ("Grid OFF", False)]
]


fig.update_layout(updatemenus=[{"buttons": buttons}]).update_xaxes(
    # showgrid=True,
    # gridwidth=2,
    gridcolor="LightPink",
    # tickmode="linear",
    tick0=0,
    dtick=60,
    range=[0, 2500],
).update_yaxes(
    # showgrid=True,
    # gridwidth=2,
    gridcolor="LightPink",
    # # tickmode='linear',
    # # tick0=0,
    dtick=0.1,
)