Plotly - 复选框而不是下拉选择

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

我正在尝试使用plotly来显示带有滑块和过滤器复选框下拉列表的折线图。

我的数据框(ct2)如下所示:

类别 日期
A 2022-06-01 123
B 2022-06-02 56
C 2022-06-03 42
C 2022-06-01 84
A 2022-06-05 32

我的滑块正在工作,我的下拉列表显示项目,但是当我选择类别时,它不会更新图表。

我面临两个问题:

  1. 我的下拉列表不起作用(当我从下拉列表中选择一个类别时,图表变为空)
  2. 我想从复选框中选择多个项目,而不是仅从下拉列表中选择 1 个项目

我的代码:

import plotly.graph_objects as go
import pandas as pd

fig = go.Figure()
for Category, group in ct2.groupby("Category"):
    fig.add_trace(go.Line(x= group["Date"], y= group["Count"], name= Category,
      hovertemplate="Category=%s<br>Date=%%{x}<br>Count=%%{y}<extra></extra>"% Category))
fig.update_layout(legend_title_text = "Category")
fig.update_xaxes(title_text="Date")
fig.update_yaxes(title_text="Count")

fig.update_layout(
    title_text="Time series with range slider and selectors"
)

fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=list([
                dict(count=2,
                     label="2m",
                     step="month",
                     stepmode="backward"),
                dict(count=6,
                     label="6m",
                     step="month",
                     stepmode="backward"),
                dict(count=1,
                     label="YTD",
                     step="year",
                     stepmode="todate"),
                dict(count=1,
                     label="1y",
                     step="year",
                     stepmode="backward"),
                dict(step="all")
            ])
        ),
        rangeslider=dict(
            visible=True
        ),
        type="date"
    )
)

fig.update_layout(fig_tmp.layout)

fig.update_layout(
    updatemenus=[
        {
            "buttons": [
                {
                    "label": c,
                    "method": "restyle",
                    "args": ["visible", [t.legendgroup == c for t in fig.data]],
                }
                for c in ct2["Category"].unique()
            ]
        }
    ]
)

fig.show()
python pandas plotly visualization
1个回答
1
投票

不显示的原因是所有显示设置都是错误的。如果满足条件,则需要将条件更改为 true,否则为 false。

第二个问题是plotly的自定义控件中没有复选框。如果要选择多个类别,则应添加具有多个条件的按钮。代码如下。

{'label': 'A_C', 'method': '{'label': 'A_C', 'method': 'update','args': ['visible', [True, False, True]]}

import plotly.graph_objects as go
import pandas as pd

fig = go.Figure()
for Category, group in ct2.groupby("Category"):
    fig.add_trace(go.Scatter(x= group["Date"],
                             y= group["Count"],
                             name= Category,
                             hovertemplate="Category=%s<br>Date=%%{x}<br>Count=%%{y}<extra></extra>"% Category,
                             visible=True,
                            ))
    
fig.update_layout(legend_title_text = "Category")
fig.update_xaxes(title_text="Date")
fig.update_yaxes(title_text="Count")

fig.update_layout(
    title_text="Time series with range slider and selectors"
)

fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=list([
                dict(count=2,
                     label="2m",
                     step="month",
                     stepmode="backward"),
                dict(count=6,
                     label="6m",
                     step="month",
                     stepmode="backward"),
                dict(count=1,
                     label="YTD",
                     step="year",
                     stepmode="todate"),
                dict(count=1,
                     label="1y",
                     step="year",
                     stepmode="backward"),
                dict(step="all")
            ])
        ),
        rangeslider=dict(
            visible=True
        ),
        type="date"
    )
)


buttons = [{'args': [{'visible': [True, False, False]}], 'label': 'A', 'method': 'update'},
           {'args': [{'visible': [False, True, False]}], 'label': 'B', 'method': 'update'},
           {'args': [{'visible': [False, False, True]}], 'label': 'C', 'method': 'update'},
           {'args': [{'visible': [True, False, True]}], 'label': 'A_C', 'method': 'update'},
          ]

fig.update_layout(
    updatemenus=[
        {
            "buttons": buttons
        }
    ],
)

fig.show()

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