如何在基于matplotlib的pandas时间序列图上绘制部分趋势线
解决方法
你只需要保证趋势线和原时间序列图共享同一个绘图Axes对象,且趋势线的x轴使用和原图一致的日期索引即可,具体实现步骤如下:
1. 前置依赖导入(若已导入可跳过)
import pandas as pd import numpy as np import matplotlib.pyplot as plt
2. 先绘制原始时间序列图,保留绘图Axes对象
# 假设你的xdf是索引为datetime格式的pandas Series fig, ax = plt.subplots(figsize=(10, 6)) # 绘制原时间序列,和你之前的绘图逻辑保持一致即可 xdf.plot(ax=ax, label='原始数据')
3. 按你已经实现的逻辑计算线性回归参数
y = xdf.values x = np.arange(len(y)) z = np.polyfit(x, y, 1) p = np.poly1d(z)
4. 自定义趋势线展示区间,叠加绘制到原图上
# 自定义趋势线展示的起止位置(索引从0开始,可按需调整) start_pos = 5 end_pos = len(xdf) - 1 # 生成对应区间的趋势线数值 trend_x_idx = np.arange(start_pos, end_pos + 1) trend_y = p(trend_x_idx) # 取对应区间的日期索引作为趋势线的x轴,保证和原图对齐 trend_x_date = xdf.index[start_pos:end_pos + 1] # 叠加绘制趋势线 ax.plot(trend_x_date, trend_y, color='red', linestyle='--', label='趋势线') # 添加图例展示 ax.legend() plt.show()
原理说明
同一个matplotlib的Axes对象支持叠加绘制多组数据,只要两组数据的x轴坐标格式一致即可自动对齐。你之前单独绘制趋势线时使用的是序列序号作为x轴,和原时间序列的日期x轴格式不匹配,统一为日期格式后即可正常叠加。调整start_pos和end_pos的数值即可修改趋势线的展示范围。
内容的提问来源于stack exchange,提问作者yunfei
相关产品推荐
相关产品推荐

