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

如何合并长度不同的pandas时序DataFrame并在同一张matplotlib图中绘制

问题原因

你目前的代码无法将曲线叠加的核心原因是:pandas的DataFrame.plot()方法默认每调用一次就会创建一张独立的新画布,不会复用之前的画布对象。

解决方案

你只需要主动指定所有绘图操作共用同一个坐标轴(Axes)对象即可,修改后的代码如下:

import matplotlib.pyplot as plt
import pandas as pd

# 保留你原有的数据预处理逻辑
df_date_grouping = df['month_year'].value_counts().to_frame('Visits').rename_axis('dates').reset_index()
df_date_grouping = df_date_grouping.sort_values(by="dates")  
df2_date_grouping = df2['month_year'].value_counts().to_frame('df2 Visits').rename_axis('dates').reset_index()
df2_date_grouping = df2_date_grouping.sort_values(by="dates")  
df3_date_grouping = df3['month_year'].value_counts().to_frame('df3 Visits').rename_axis('dates').reset_index()
df3_date_grouping = df3_date_grouping.sort_values(by="dates")  
df4_date_grouping = df4['month_year'].value_counts().to_frame('df4 Visits').rename_axis('dates').reset_index()
df4_date_grouping = df4_date_grouping.sort_values(by="dates")  

# 初始化画布,获取共用的坐标轴对象
plt.figure(figsize=(12,6)) # 可自行调整画布尺寸
ax = plt.gca() # gca = get current axes,获取当前画布的坐标轴

# 所有plot操作都指定ax参数,复用同一个坐标轴
df_date_grouping.plot('dates', 'Visits' , color= 'purple', ax=ax, label='Visits')
df2_date_grouping.plot( 'dates', 'df2 Visits', color= 'blue', ax=ax, label='df2 Visits')
df3_date_grouping.plot(  'dates', 'df3 Visits', color= 'orange' , ax=ax, label='df3 Visits')
df4_date_grouping.plot( 'dates', 'df4 Visits', color= 'red', ax=ax, label='df4 Visits')

# 可选优化:旋转x轴日期避免重叠,自动适配布局
plt.xticks(rotation=45)
plt.tight_layout()

plt.savefig(path)
plt.clf()

注意事项

  • 如果dates列是字符串格式,建议提前转为datetime类型df_date_grouping['dates'] = pd.to_datetime(df_date_grouping['dates']),避免x轴日期排序异常
  • 如果不同DataFrame的日期范围不一致,x轴会自动适配覆盖所有出现过的日期,缺失日期对应的数值会自动断开
  • 可按需添加标题、坐标轴标签等自定义样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:54:01