Python时间序列图添加训练测试集分割竖线的实现方法
时间序列图添加训练/测试集分割竖线的解决方法
你算出的split_point是数据的行索引位置(整数),而plt.axvline需要传入对应的日期值(即DataFrame索引中的datetime对象),直接通过df.index[split_point]就能获取到这个分割日期,具体实现如下:
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt # 读取你的时间序列数据,确保date列被解析为日期并设为索引 df = pd.read_csv('a10.csv', parse_dates=['date'], index_col='date') data_size = len(df) split_point = data_size - data_size // 3 # 核心:通过行索引位置获取对应的分割日期 split_date = df.index[split_point] # 绘制带分割线的时间序列图 def plot_df(df, x, y, split_date, title="", xlabel='Date', ylabel='Value', dpi=100): plt.figure(figsize=(16,5), dpi=dpi) plt.plot(x, y, color='tab:red') # 添加分割竖线,可自定义样式增强辨识度 plt.axvline(x=split_date, color='tab:blue', linestyle='--', linewidth=2, label='训练/测试集分割') plt.gca().set(title=title, xlabel=xlabel, ylabel=ylabel) plt.legend() # 显示分割线标签 plt.show() # 调用绘图函数 plot_df(df, x=df.index, y=df.value, split_date=split_date, title='1992-2008年澳大利亚抗糖尿病药物月度销量')
关键细节
split_date = df.index[split_point]:这一步是将整数位置转换为日期的核心,因为你的DataFrame索引已经是datetime类型,直接取对应位置的索引值即可- 可以通过调整
plt.axvline的color、linestyle、linewidth参数自定义竖线样式,添加label并配合plt.legend()能让分割线的含义更清晰
内容的提问来源于stack exchange,提问作者Nneka
相关产品推荐
相关产品推荐

