【问题标题】:Update axes when pressing button in plotly scatter plot在绘图散点图中按下按钮时更新轴
【发布时间】:2020-03-17 08:40:24
【问题描述】:

我有几个数字列表,我想以成对的方式进行比较。我尝试使用 Plotly 制作散点图并添加按钮,我希望能够更改 x 或 y 轴上的列表。

使用example in the documentation,我设法创建了情节和按钮。但是,当我选择另一个列表时,轴不会更新。

这是我的代码示例:

import plotly
from plotly import graph_objs as go, offline as po, tools
po.init_notebook_mode()

import numpy as np

l1 = list(np.random.randint(100, size=100))
l2 = list(np.random.rand(100))
l3 = list(np.random.randint(100, size=100))

# Create figure
fig = go.Figure()

# Add scatter
fig.add_trace(go.Scatter(
     x=l1,
     y=l1,
    mode = 'markers'
)
             )

# Add drowdowns
button_layer_1_height = 1.15
fig.update_layout(
    updatemenus=[
        go.layout.Updatemenu(
            buttons=list([
                dict(
                    args=["x", l1],
                    label="L1",
                    method="restyle"
                ),
                dict(
                    args=["x", l2],
                    label="L2",
                    method="restyle"
                ),
                dict(
                    args=["x", l3],
                    label="L3",
                    method="restyle"
                ),
            ]),
            direction="down",
            pad={"r": 10, "t": 10},
            showactive=True,
            x=0.02,
            xanchor="left",
            y=button_layer_1_height,
            yanchor="top"
        ),
        go.layout.Updatemenu(
            buttons=list([
                dict(
                    args=["y", l1],
                    label="L1",
                    method="restyle"
                ),
                dict(
                    args=["y", l2],
                    label="L2",
                    method="restyle"
                ),
                dict(
                    args=["y", l3],
                    label="L3",
                    method="restyle"
                ), 
            ]),
            direction="down",
            pad={"r": 10, "t": 10},
            showactive=True,
            x=0.15,
            xanchor="left",
            y=button_layer_1_height,
            yanchor="top"
        ),
    ]
)

fig.update_layout(
    annotations=[
        go.layout.Annotation(text="x", x=0, xref="paper", y=1.08, yref="paper",
                             align="left", showarrow=False),
        go.layout.Annotation(text="y", x=0.13, xref="paper", y=1.08,
                             yref="paper", showarrow=False),
    ])

fig.show()

【问题讨论】:

    标签: python python-3.x plotly scatter-plot


    【解决方案1】:

    在args 中,您的列表(例如 L1)需要是列表的元素,而不仅仅是列表本身。因此,只需将您所有的 args=["x", l1] 更改为 args=["x", [l1]] 就可以了!听起来好得令人难以置信?这里有一些证据

    首次运行时绘制:

    为 x 选择 L2 时的绘图:

    为 y 选择 L3 时的绘图:

    这是您编辑后的代码:

    import plotly
    from plotly import graph_objs as go, offline as po, tools
    po.init_notebook_mode()
    
    import numpy as np
    
    l1 = list(np.random.randint(100, size=100))
    l2 = list(np.random.rand(100))
    l3 = list(np.random.randint(100, size=100))
    
    # Create figure
    fig = go.Figure()
    
    # Add scatter
    fig.add_trace(go.Scatter(
         x=l1,
         y=l1,
        mode = 'markers'
    )
                 )
    
    # Add drowdowns
    button_layer_1_height = 1.15
    fig.update_layout(
        updatemenus=[
            go.layout.Updatemenu(
                buttons=list([
                    dict(
                        args=["x", [l1]],
                        label="L1",
                        method="restyle"
                    ),
                    dict(
                        args=["x", [l2]],
                        label="L2",
                        method="restyle"
                    ),
                    dict(
                        args=["x", [l3]],
                        label="L3",
                        method="restyle"
                    ),
                ]),
                direction="down",
                pad={"r": 10, "t": 10},
                showactive=True,
                x=0.02,
                xanchor="left",
                y=button_layer_1_height,
                yanchor="top"
            ),
            go.layout.Updatemenu(
                buttons=list([
                    dict(
                        args=["y", [l1]],
                        label="L1",
                        method="restyle"
                    ),
                    dict(
                        args=["y", [l2]],
                        label="L2",
                        method="restyle"
                    ),
                    dict(
                        args=["y", [l3]],
                        label="L3",
                        method="restyle"
                    ), 
                ]),
                direction="down",
                pad={"r": 10, "t": 10},
                showactive=True,
                x=0.15,
                xanchor="left",
                y=button_layer_1_height,
                yanchor="top"
            ),
        ]
    )
    
    fig.update_layout(
        annotations=[
            go.layout.Annotation(text="x", x=0, xref="paper", y=1.08, yref="paper",
                                 align="left", showarrow=False),
            go.layout.Annotation(text="y", x=0.13, xref="paper", y=1.08,
                                 yref="paper", showarrow=False),
        ])
    
    fig.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多