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

如何将Pandas绘制的三个年度1月时间序列图合并为一个图

解决方法:合并多年度同月份时间序列折线图到单个画布

一、数据预处理(关键步骤)

先确保日期列解析为datetime类型,精准筛选目标数据,并为绘图准备对齐的X轴字段:

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV,解析日期列(替换成你的日期列名)
df = pd.read_csv('your_data.csv', parse_dates=['date'])

# 筛选目标公司+2020-2022年1月的数据
target_company = '你的目标公司名称'
filtered_df = df[
    (df['company'] == target_company)
    & (df['date'].dt.month == 1)
    & (df['date'].dt.year.isin([2020, 2021, 2022]))
].copy()

# 生成月-日字段(让三年的日期点在X轴对齐),年份转为字符串用于区分线条
filtered_df['month_day'] = filtered_df['date'].dt.strftime('%m-%d')
filtered_df['year'] = filtered_df['date'].dt.year.astype(str)

二、两种合并绘图的实现方式

方式1:Matplotlib画布+Pandas分组绘图(灵活可控)

核心是指定同一个ax对象,避免Pandas自动创建新画布:

# 创建单个画布和轴对象
fig, ax = plt.subplots(figsize=(10, 6))

# 按年份分组,循环绘制每条折线到同一个ax上
for year, group_data in filtered_df.groupby('year'):
    group_data.plot(
        x='month_day',
        y='你的数值列名称',  # 替换成实际的数值列,比如'营收'/'股价'
        ax=ax,
        label=f'{year}年1月',
        marker='o'  # 添加标记点更易区分数据点
    )

# 调整图表样式
ax.set_title('目标公司2020-2022年1月趋势对比')
ax.set_xlabel('日期(月-日)')
ax.set_ylabel('指标数值')
ax.legend()
plt.xticks(rotation=45)  # 旋转X轴标签防止重叠
plt.tight_layout()  # 自动适配布局,避免标签被截断

# 显示图表
plt.show()

方式2:透视表+Pandas一键绘图(简洁高效)

先把数据转成透视表,让年份成为列,直接调用plot即可自动合并到同一画布:

# 转换为透视表:行=月-日,列=年份,值=目标指标
pivot_df = filtered_df.pivot(
    index='month_day',
    columns='year',
    values='你的数值列名称'
)

# 直接绘图,默认会把所有列画在同一个画布
pivot_df.plot(figsize=(10, 6), marker='o')
plt.title('目标公司2020-2022年1月趋势对比')
plt.xlabel('日期(月-日)')
plt.ylabel('指标数值')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

三、常见问题排查

  • 生成三个独立图:原因是每次调用df.plot()时没有指定ax参数,Pandas会自动创建新画布。必须将所有绘图绑定到同一个ax对象上。
  • 无图显示:检查两点:① 是否调用了plt.show();② 筛选后的filtered_df是否为空(确认公司名称、日期范围是否正确)。
  • X轴日期不对齐:直接用原始日期会导致三年的日期点分散,通过dt.strftime('%m-%d')提取月-日,能让同日期的点在X轴重合,对比更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:55:49