首页 > 解决方案 > 在python中着色时间序列图

问题描述

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

我试图遮蔽时间序列图周围的区域。我尝试了fill_between功能,但它不起作用。

我试过:

# load the file
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

# 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

预期输出:

在此处输入图像描述

标签: pythonmatplotlibplotseaborndata-visualization

解决方案


线周围的阴影区域代表 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()

在此处输入图像描述


推荐阅读