在Python中对TimeSeries绘图进行着色

问题描述

我有一个数据帧,数据示例如下所示。

我正在尝试对时间序列图周围的区域进行阴影处理。我尝试使用fill_between函数,但不起作用。

我已尝试:

# load the file
df = pd.read_csv(r"C:Userssamdata.csv", usecols=['Hour','Forecast'],header=0)

X1=df.forecast
mu = X1.mean
sigma = X1.std

timestep=df.Hour

# ss=mu1+sigma1
# kk=mu1-sigma1
 
plt.fill_between(timestep, mu, sigma, alpha=0.2) #this is the shaded error

sample_data.csv

Hour Forecast
1   0.428732899
2   0.501308875
3   0.491805242
4   0.392900424
5   0.442624008
6   0.411723392
7   0.397455466
8   0.400126642
9   0.444411425
10  0.423408925
11  0.759687642
12  2.166908125
13  2.153370175
14  2.053740002
15  2.095005501
16  2.153214908
17  2.210168766
18  2.122148284
19  1.9024695
20  2.255718026
21  2.258879807
22  0.480089583
23  1.551103332
24  1.512505375

预期产量:


解决方案

线条周围的阴影区域表示95%置信区间。为了获得此区域,每个时间点都应该有多个观测值,因此可以计算每个时间点的标准偏差和CI。但是在您提供的数据中,每个时间点只有一个观察值。
您可以通过计算标准偏差和总和,然后从要绘制的列中减去标准偏差,来绘制类似的绘图。注意!这不是置信区间(需要更多观察),而是每个时间点平均值附近的2倍标准差的区间。此外,它在时间轴上保持恒定宽度。
老实说,我怀疑这是一个有用的绘图,因为面积宽度在时间上是恒定的,而面积宽度是标准差的2倍,标准差是沿时间计算的。简而言之:您不应该使用此图并为每个时间点提供更多观测数据来计算适当的置信区间。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv(r"data/data.csv", usecols = ['Hour', 'Forecast'], header = 0)

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

timestep = df.Hour

X1_plus_sigma = X1 + sigma
X1_minus_sigma = X1 - sigma

plt.plot(timestep, X1, color = 'blue')
plt.fill_between(timestep, X1_plus_sigma, X1_minus_sigma, alpha = 0.2, color = 'blue')

plt.show()

相关文章