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

如何用Python的Plotly实现带时间滑块的多日期组合权重柱状图?

用Plotly实现带时间滑块的投资组合权重柱状图

完全可以用Plotly实现这个需求,通过滑块组件切换日期,动态展示当日的资产权重分布。以下是具体实现方案:

实现步骤

  • 读取并预处理数据:将DATE列转为标准日期格式,整理资产权重列
  • 创建基础柱状图:以首个日期的权重数据作为初始展示内容
  • 添加时间滑块:为每个日期配置滑块步骤,通过回调逻辑更新柱状图数据

完整代码示例

import pandas as pd
import plotly.graph_objects as go

# 读取数据(替换为你的CSV文件路径)
df = pd.read_csv('portfolio_weights.csv')
# 格式化日期为字符串,便于滑块显示
df['DATE'] = pd.to_datetime(df['DATE']).dt.strftime('%Y-%m-%d')

# 提取所有资产列名
asset_columns = [col for col in df.columns if col != 'DATE']

# 初始化图表:使用第一行日期的数据
first_date = df['DATE'].iloc[0]
first_weights = df[df['DATE'] == first_date][asset_columns].values.flatten()

fig = go.Figure(
    data=[go.Bar(x=asset_columns, y=first_weights)],
    layout=go.Layout(
        title=f"投资组合权重分布 - {first_date}",
        yaxis=dict(title='权重占比', range=[0, 1]),
    )
)

# 配置时间滑块
sliders = [dict(
    active=0,
    currentvalue={"prefix": "选中日期: "},
    pad={"t": 60},
    steps=[dict(
        method="update",
        args=[
            {"y": [df[df['DATE'] == date][asset_columns].values.flatten()]},
            {"title": f"投资组合权重分布 - {date}"}
        ],
        label=date
    ) for date in df['DATE']]
)]

fig.update_layout(sliders=sliders)

# 渲染图表
fig.show()

功能说明

  • 滑块的每个选项对应CSV中的一个日期,点击或拖动滑块即可切换展示对应日期的资产权重
  • Y轴固定在0-1区间,便于直观对比不同日期的权重变化
  • 图表标题会同步显示当前选中的日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:06:26