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

Python使用fill_between为时间序列绘图添加阴影区域问题求助

问题原因

  • 列名大小写不匹配:读取数据时指定的列名为Forecast(首字母大写),代码取值时写为小写的df.forecast,无法正确获取数据。
  • 统计方法未调用:X1.mean和X1.std是pandas的内置方法,需要添加()执行调用才能得到计算后的均值、标准差数值。
  • fill_between参数错误:该函数的后两个入参分别是填充区间的y轴下限和y轴上限,你直接传入mu和sigma两个独立值,填充区间完全不符合预期。

修正后可运行代码

import pandas as pd
import matplotlib.pyplot as plt

# 加载数据
df = pd.read_csv(r"C:\Users\sam\data.csv", usecols=['Hour','Forecast'], header=0)

X1 = df.Forecast
mu = X1.mean()
sigma = X1.std()
timestep = df.Hour

# 先绘制预测值折线
plt.plot(timestep, X1, color='#1f77b4', label='预测值')
# 填充均值上下一个标准差的阴影区间
plt.fill_between(timestep, mu - sigma, mu + sigma, color='#1f77b4', alpha=0.2, label='±1标准差区间')

plt.xlabel('小时')
plt.ylabel('预测值')
plt.legend()
plt.show()

如果需要基于滑动窗口计算的局部置信区间(而非全局均值的固定区间),可以替换为滚动统计逻辑:

# 计算窗口大小为3的滚动均值和滚动标准差
roll_mean = X1.rolling(3).mean()
roll_std = X1.rolling(3).std()
plt.plot(timestep, roll_mean, label='滑动均值')
plt.fill_between(timestep, roll_mean - roll_std, roll_mean + roll_std, alpha=0.2, label='±1滑动标准差区间')

内容的提问来源于stack exchange,提问作者user12729159

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:30:03