python - 在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
预期输出:
解决方案
线周围的阴影区域代表 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()
推荐阅读
- c++ - C++ 多次打印“once *some number* is *another number*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)
- python - 用指定的字符集替换字符串中的两个字符以创建所有可能的组合
- c++ - 代码执行分配所有内存,直到它可能在代码初始化时被OOM(linux)杀死。调试此类问题的想法?
- python - Python循环遍历数据框行,直到第一次满足条件
- sharepoint - SharePoint 使用 Visual Studio 2015 将特定 WebPart 移动到另一个功能
- java - 为什么我们要在java中使用接口?
- css - 在 xaringan 演示文稿中禁用鼠标滚动
- ios - iOS 10 - Swift 仍然通知 CloudKit:应用程序未启动,在 didFinishLaunchingWithOptions 之后读取通知
- php - 如何在 php 中发送 POST 请求?
- powershell - 关于“测试连接”方法执行速度的 PowerShell 问题