如何使用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
相关产品推荐
相关产品推荐

