You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Plotly绘制带筛选菜单的图表遇异常问题求助

Plotly筛选菜单图表问题修复

问题根源

  1. 筛选逻辑错误:按钮按state筛选,但原代码用name == state判断可见性,混淆了name与state的关联关系,导致筛选结果混乱。
  2. 标题变量错误:按钮的标题使用循环变量name,最终所有按钮的标题都会变成最后一个name的值。
  3. 初始可见状态未正确配置:仅设置active=0但未对应生成初始可见的trace数组,导致初始显示所有数据而非单个州。

修复后的代码

import plotly.graph_objects as go

# 建立name到state的映射,用于后续筛选判断
state_map = combined_df.set_index('name')['state'].to_dict()
unique_names = combined_df['name'].unique()
unique_states = combined_df['state'].unique()

fig = go.Figure()

# 批量添加所有trace
for name in unique_names:
    filtered_df = combined_df[combined_df['name'] == name]
    fig.add_trace(
        go.Scatter(
            x=filtered_df['quarter_year'],
            y=filtered_df['count'],
            name=name
        )
    )

# 配置初始可见状态:仅显示第一个州的所有数据
initial_state = unique_states[0]
initial_visible = [state_map[name] == initial_state for name in unique_names]

fig.update_layout(
    updatemenus=[
        go.layout.Updatemenu(
            active=0,
            buttons=[
                dict(
                    label=state,
                    method='update',
                    args=[
                        # 显示当前州对应的所有trace
                        {'visible': [state_map[name] == state for name in unique_names]},
                        # 更新图表标题为当前选中的州
                        {'title': f'数据统计 - {state}', 'showlegend': True}
                    ]
                ) for state in unique_states
            ]
        )
    ],
    # 设置初始图表标题
    title=f'数据统计 - {initial_state}'
)

fig.show()

关键修复点

  • 关联映射:新增state_map字典,明确每个name对应的state,确保筛选逻辑准确。
  • 初始状态:手动生成initial_visible数组,保证打开图表时仅展示第一个州的数据。
  • 参数修正:按钮的可见性判断改为state_map[name] == state,标题使用当前按钮的state变量,避免变量混淆。
  • 标题一致性:初始标题与初始可见状态匹配,保持界面统一。

内容的提问来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:42:58