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

如何用Plotly为Pandas多列数据添加下拉选择菜单绘制图表

问题描述

我有一个Pandas DataFrame,想要用Plotly绘制柱状图,并且通过下拉菜单选择不同的股票名称列来查看对应数据。尝试相关方法后,不确定如何把动态变化的列名添加到updatemenus中,附上当前代码和参考DataFrame:

import plotly.graph_objects as go
# plotly setup
fig = go.Figure()

# Add traces, starting from First Column. Each column is a stock data.
for mycolumn in df.columns[1:]:
    fig.add_traces( go.Scatter(x=list(df.Quarters), y=list(df[mycolumn])) )

updatemenus = None

for mycolumn in df.columns[1:]:
    # construct menus
    updatemenus = [{'buttons': 
                    [{'method': 'update',
                      'label' : column, # what?
                      'args'  : [{'y': [values_1, values_1b]},] # what?
                     }
                    'direction': 'down',
                    'showactive': True,}
                  ]

# update layout with buttons, and show the figure
fig.update_layout(updatemenus=updatemenus)
fig.show()

参考DataFrame:

Quarters526433AARTIINDDEEPAKNTRGREENPANELMETROBRANDMOLDTECHMUFTIMUTHOOTFINYASHOZENTEC
Mar-214.61.69
Jun-212.994.5522.192.431.1624.3710.01-0.14
Sep-213.774.1418.655.471.891.324.9712.440
Dec-214.320.0117.785.143.690.5925.9112.71-0.02
Mar-221.545.3419.596.572.491.6724.8411.690.42
Jun-223.353.7517.26.333.81.120.4116.990.94
Sep-222.843.4212.795.912.722.4380.922.2219.610.71
Dec-222.253.7715.333.064.223.2660.2523.119.181.19
Mar-230.254.1117.155.622.443.5867.4324.2513.762.54
Jun-230.361.9310.993.043.912.211.3325.4612.975.6
Sep-23-1.592.5115.043.342.922.864.3526.3910.231.82
Dec-23-0.193.4214.812.823.522.472.4227.4911.883.64
Mar-24-2.593.6418.612.436.052.261.128.3715.744.16
Jun-242.833.7814.853.41.811.5128.99-2.169.14
解决方案

核心思路

  1. 先添加所有股票的柱状图轨迹,默认仅显示第一个股票的数据
  2. 遍历股票列动态生成下拉按钮,点击按钮时切换对应轨迹的可见状态并更新图表标题

修正后的完整代码

import plotly.graph_objects as go
import pandas as pd

# 替换为你的DataFrame加载逻辑
# df = pd.read_csv("your_data_source.csv")

fig = go.Figure()

stock_columns = df.columns[1:]
# 批量添加柱状图轨迹,默认只显示第一个股票
for idx, col in enumerate(stock_columns):
    fig.add_trace(go.Bar(
        x=df['Quarters'],
        y=df[col],
        name=col,
        visible=(idx == 0)
    ))

# 动态生成下拉菜单按钮
buttons = []
for idx, col in enumerate(stock_columns):
    buttons.append({
        'label': col,
        'method': 'update',
        'args': [
            # 仅让当前选中的股票轨迹可见
            {'visible': [i == idx for i in range(len(stock_columns))]},
            # 更新图表标题,明确当前查看的股票
            {'title': f'季度数据:{col}'}
        ]
    })

# 配置下拉菜单的位置和样式
updatemenus = [{
    'buttons': buttons,
    'direction': 'down',
    'showactive': True,
    'x': 0.1,
    'xanchor': 'left',
    'y': 1.15,
    'yanchor': 'top'
}]

# 完善图表整体布局
fig.update_layout(
    updatemenus=updatemenus,
    title='季度股票数据',
    xaxis_title='季度',
    yaxis_title='数值'
)

fig.show()

关键说明

  • 动态列适配:通过遍历df.columns[1:]生成按钮和轨迹,无需硬编码列名,自动适配列名变化的场景
  • 可见性控制:利用visible参数实现轨迹的显示/隐藏切换,默认仅展示第一个股票
  • 交互体验优化:点击按钮时同步更新标题,让用户清晰知晓当前查看的股票

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:59:51