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

