【问题标题】:shading the timeseries plot in python在python中着色时间序列图
【发布时间】:2021-10-31 20:45:29
【问题描述】:

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

我正在尝试遮蔽时间序列图周围的区域。我尝试了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

预期输出:

【问题讨论】:

  • 我认为您应该执行 plt.fill_between(timestep, ss, kk) 其中 ss 和 kk 是您定义为 mu+-sigma 的内容。 matplotlib.org/stable/api/_as_gen/…
  • 这里的目标是得到一个阴影很好的时间序列图,忽略置信区间等技术术语。
  • 您可以通过任意设置 sigma 的值来按照答案中的说明进行操作吗?像西格玛 = 1?还是5?取决于你想要遮蔽的厚度。

标签: python matplotlib plot seaborn data-visualization


【解决方案1】:

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

【讨论】:

  • 不错的答案。我可以减小阴影区域的宽度吗?总的来说,这里的目标是得到一个阴影很好的时间序列图,忽略置信区间等技术术语。
  • 如果这是目标,那么您可以根据需要使阴影区域变宽:只需将 X1_plus_sigma = X1 + sigma 更改为 X1_plus_sigma = X1 + k*sigma 并将 X1_minus_sigma = X1 - sigma 更改为 X1_minus_sigma = X1 - k*sigma 您可以使用类似 @987654328 的内容@,或任何你喜欢的值。 k越小,阴影区域越小
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多