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

如何使用Plotly基于pandas groupby结果绘制时间维度同图多折线图

Plotly 绘制分组多折线实现步骤

1. 规整分组聚合结果

你当前的groupby仅定义了分组规则,还未执行聚合计算,先统计每个分组的计数值,再将多级索引转换为普通数据列,适配Plotly的入参要求:

import pandas as pd
import plotly.express as px

# 初始数据加载
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df['Date']=pd.to_datetime(df['Date'])

# 按月度+direction分组统计计数
monthly_stats = df.groupby(
    [pd.Grouper(key='Date', freq='M'), 'direction']
).size().reset_index(name='count')

处理后的数据表为标准三列结构:

  • Date:月度时间维度,对应x轴
  • direction:走势分类字段,用于拆分不同折线
  • count:分组计数值,对应y轴

2. 快速绘制多折线图

直接调用Plotly Express的line接口,通过color参数指定按direction字段拆分折线,无需手动筛选分组:

fig = px.line(
    monthly_stats,
    x='Date',
    y='count',
    color='direction',
    markers=True,
    title='月度走势方向计数变化',
    labels={'count': '交易日数量', 'Date': '月份', 'direction': '走势类型'}
)
# 优化x轴时间显示格式
fig.update_xaxes(tickformat='%Y-%m')
fig.show()

运行后会自动生成带交互效果的折线图,不同direction类别对应独立颜色的折线,自带可点击筛选的图例。

可选:自定义程度更高的graph_objects实现

如果需要对单条折线做精细化样式调整,可以遍历分组逐根添加折线:

import plotly.graph_objects as go

fig = go.Figure()
# 遍历每个分类单独添加折线
for dir_category in monthly_stats['direction'].unique():
    category_data = monthly_stats[monthly_stats['direction'] == dir_category]
    fig.add_trace(go.Scatter(
        x=category_data['Date'],
        y=category_data['count'],
        mode='lines+markers',
        name=dir_category,
        line_width=2
    ))

fig.update_layout(
    title='月度走势方向计数变化',
    xaxis_title='月份',
    yaxis_title='交易日数量',
    xaxis=dict(tickformat='%Y-%m')
)
fig.show()

如果你后续需要聚合其他指标(比如收盘价均值、成交量总和),只需要把分组部分的.size()替换为对应的聚合逻辑,例如.agg({'AAPL.Close': 'mean'}),后续绘图逻辑无需修改。

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:42:17