如何使用Python Seaborn合并两个时间序列图
时间序列训练-预测全周期统一可视化实现
核心实现逻辑:
- 放弃训练集、测试集分两张图/两个子图的绘制方式,在同一坐标轴下拼接连续时间轴,保证X轴按时间先后顺序连贯展示
- 按从底层到顶层的顺序绘制元素,避免图层遮挡:先画可信区间填充带,再画后验预测曲线,最后绘制训练集、测试集的真实观测散点
- 在测试集第一个时间步的X轴位置添加垂直分割线,明确划分训练阶段和预测阶段的边界
完整可运行示例代码
以下代码包含模拟数据生成、全流程绘图逻辑,替换代码中模拟数据部分为你的真实数据集即可直接使用:
import numpy as np import matplotlib.pyplot as plt # ------------ 数据部分:替换为你自己的训练/测试集、预测结果数据 ------------ # 构造连续时间轴:前100个时间步为训练集,后50个时间步为测试集 train_time = np.arange(0, 100) test_time = np.arange(100, 150) # 模拟训练集观测值 train_obs = 0.1 * train_time + np.random.normal(0, 1, size=len(train_time)) # 模拟测试集真实观测值 test_obs = 0.1 * test_time + np.random.normal(0, 1, size=len(test_time)) # 模拟测试集后验预测均值 pred_mean = 0.1 * test_time # 模拟95%可信区间上下界 pred_ci_lower = pred_mean - 1.96 * 1.2 pred_ci_upper = pred_mean + 1.96 * 1.2 # ------------ 绘图部分 ------------ plt.figure(figsize=(12, 5), dpi=100) ax = plt.gca() # 1. 绘制最底层:测试集可信区间填充带 ax.fill_between( test_time, pred_ci_lower, pred_ci_upper, color='#a8d1ff', alpha=0.4, label='95%可信区间' ) # 2. 绘制后验预测均值曲线 ax.plot( test_time, pred_mean, color='#1f77b4', linewidth=2, label='后验预测均值' ) # 3. 绘制训练集观测散点 ax.scatter( train_time, train_obs, color='#2ca02c', s=15, alpha=0.7, label='训练集观测值' ) # 4. 绘制测试集真实观测散点 ax.scatter( test_time, test_obs, color='#ff7f0e', s=15, alpha=0.7, label='测试集真实值' ) # 5. 绘制训练-测试分割垂直线 split_pos = test_time[0] ax.axvline(x=split_pos, color='crimson', linestyle='--', linewidth=1.5) ax.text( split_pos + 1, ax.get_ylim()[1] * 0.95, '测试集起始位置', color='crimson', va='top' ) # 图表基础配置 ax.set_xlabel('时间步') ax.set_ylabel('观测值') ax.set_title('时间序列全周期预测拟合效果') ax.legend(loc='upper left') plt.grid(alpha=0.3) plt.tight_layout() plt.show()
输出图表为单张连续时间轴的可视化结果:分割线左侧展示训练阶段的真实观测分布,右侧展示预测区间、预测曲线与测试集真实值的对应关系,可直接直观判断预测结果对测试集的拟合程度、可信区间的覆盖效果。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

