何度も得られる系列データの比較において,平均に対する標準の幅がわかるようにプロットすることが多い.
このような図を作りたい.
- 準備
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
from numpy.random import randn
from scipy.stats.mstats import mquantiles
- データの生成
適当に2つのダミーデータを用意する.
x = np.arange(0, 30)
data1 = randn(100, 30) * 0.1 * x + x
data2 = randn(100, 30) * 0.2 * x + 0.2 * x + 5
- とりあえずプロット
2種類の系列データが,それぞれ100回分あるため,alphaを小さくして重ねてプロットしてもわかりにくい.
for d in data1:
plt.plot(d, alpha=0.1, c='gray')
plt.show()
for d in data2:
plt.plot(d, alpha=0.1, c='gray')
plt.show()
- 平均と標準偏差の計算
0軸方向で平均と標準偏差を計算する.
m1 = data1.mean(axis=0)
std1 = data1.std(axis=0)
m2 = data2.mean(axis=0)
std2 = data2.std(axis=0)
- プロット
通常はplt.plotを用いて平均だけをプロットすることが多いが,平均±標準偏差をプロットするためにplt.fill_between
を利用する.
plt.fill_between(x, m1 + std1, m1 - std1, alpha=0.2, color='gray')
plt.plot(x, m1, color='gray')
plt.fill_between(x, m2 + std2, m2 - std2, alpha=0.2, color='red')
plt.plot(x, m2, color='red')
plt.show()
表示結果がこれ.