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

如何用Matplotlib绘制跨年度同比折线图(X轴仅显示月日)

三年每日数据折线图实现方案

1. 数据预处理

  • 先把DateTime列转成datetime类型:
    df['DateTime'] = pd.to_datetime(df['DateTime'])
    
  • 拆分出年份和月日信息:
    df['year'] = df['DateTime'].dt.year
    df['month_day'] = df['DateTime'].dt.strftime('%m/%d')
    
  • 因为示例里同一天有多个价格数据,先按年份和日期分组取平均值:
    daily_avg = df.groupby(['year', 'month_day'])['price'].mean().reset_index()
    
    要是你数据每天只有一个价格,这步可以直接跳过。

2. 拆分各年份数据

df_2007 = daily_avg[daily_avg['year'] == 2007]
df_2008 = daily_avg[daily_avg['year'] == 2008]
df_2009 = daily_avg[daily_avg['year'] == 2009]

3. 绘制折线图

import matplotlib.pyplot as plt

# 设定画布大小
plt.figure(figsize=(12, 6))

# 分别画出三年的折线
plt.plot(df_2007['month_day'], df_2007['price'], label='2007年')
plt.plot(df_2008['month_day'], df_2008['price'], label='2008年')
plt.plot(df_2009['month_day'], df_2009['price'], label='2009年')

# 优化X轴显示,避免标签挤在一起,这里选每30天取一个日期做标签
xticks = df_2007['month_day'][::30].tolist()
plt.xticks(ticks=xticks, rotation=45)

# 加一些图表标注
plt.xlabel('日期(月/日)')
plt.ylabel('价格')
plt.title('三年每日价格趋势对比')
plt.legend()
plt.tight_layout()  # 自动调整布局,防止标签被切掉

# 展示图表
plt.show()

额外提示

  • 2008年是闰年有2月29日,代码会自动匹配对应日期,不用额外处理
  • 如果想让X轴标签更精准,比如只显示每月1号,可以手动指定xticks为['01/01', '02/01', ..., '12/01']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:12:46