LoginSignup
34
41

More than 1 year has passed since last update.

2つの系列データの平均+標準偏差の幅を表示してプロットする

Posted at

何度も得られる系列データの比較において,平均に対する標準の幅がわかるようにプロットすることが多い.

このような図を作りたい.

download.png

  • 準備
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()

download-1.png
download-2.png

  • 平均と標準偏差の計算

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()

表示結果がこれ.

download.png

34
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
41