Ș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)
您可以使用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)