如何合并长度不同的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
相关产品推荐
相关产品推荐

