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
相关产品推荐
相关产品推荐

