如何在python中绘制显示置信区间的时间序列数组?

Ște*_*fan 6 python plot matplotlib seaborn

我有一些逐渐增加的时间序列,但是在很短的时间内它们非常波动。例如,时间序列可能如下所示:

[10 + np.random.rand() for i in range(100)] + [12 + np.random.rand() for i in range(100)] + [14 + np.random.rand() for i in range(100)] 
Run Code Online (Sandbox Code Playgroud)

我想绘制时间序列,重点放在总体趋势上,而不是在小浪上。有没有办法绘制一段时间内的平均值,并用表示波浪的条纹包围(条纹应代表置信区间,此时数据点可能在该区间)?

一个简单的图看起来像这样:

在此处输入图片说明

我想要的带有置信区间的图看起来像这样:

在此处输入图片说明

在Python中有一种优雅的方法吗?

小智 6

看起来,你将标准加倍了两次。我想应该是这样的:

time_series_df = pd.DataFrame(time_series_array)
smooth_path = time_series_df.rolling(20).mean()
path_deviation = time_series_df.rolling(20).std()
plt.plot(smooth_path, linewidth=2)
plt.fill_between(path_deviation.index, (smooth_path-2*path_deviation)[0], (smooth_path+2*path_deviation)[0], color='b', alpha=.1)
Run Code Online (Sandbox Code Playgroud)


Ște*_*fan 5

您可以使用pandas函数rolling(n)来生成n连续点的平均值和标准偏差值。

对于置信区间的阴影(用标准偏差之间的间隔表示),可以使用fill_between()来自的函数matplotlib.pyplot。有关更多信息,您可以在这里查看,从中可以得到以下代码的启发。

time_series_df = pd.DataFrame(time_series_array)
smooth_path    = time_series_df.rolling(20).mean()
path_deviation = 2 * time_series_df.rolling(20).std()
plt.plot(smooth_path, linewidth=2)
plt.fill_between(path_deviation.index, (smooth_path-2*path_deviation)[0], (smooth_path+2*path_deviation)[0], color='b', alpha=.1)
Run Code Online (Sandbox Code Playgroud)

通过以上代码,您将获得如下内容: 在此处输入图片说明