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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:50:41