[matplotlib animation] 6.正規分布(ガウス分布)のアニメーション

matplotlib Animation
スポンサーリンク

matplotlib FuncAnimationによる、正規分布の平均と分散を変化させるアニメーション

平均を移動するanimation

コード

でできるアニメーション。

解説

モジュールのインポート
軸と軸ラベル、グリッド

ax.grid()でグリッドを追加できる。

データの生成
平均\(\mu\)、分散\(\sigma^2\)の確率分布関数\(p(x)\)は、 $${p(x)=\frac{1}{\sqrt{2\pi}\sigma}\exp\left(-\frac{1}{2\sigma^2}(x-\mu)^{2}\right)}$$で与えられる。

norm.pdf(x,loc=0,scale=1)で,期待値(loc)=0,標準偏差(scale)=1の正規分布の確率密度関数のxでの値を取得する。
xがlinspaceで-10〜10まであるので、xとyで正規分布が描ける。
locを変化させるためのlocsはsin波の形で-5から5まで変化させる。

アニメーションの設定

まずグラフを入れるためのからのリストlinesを作成する。

アニメーションでは古いプロットを消す必要がある。すでにlinesにグラフが入っている場合は、lines.pop().remove()で消す。
loc=locs[num]でlocsの要素を順番に適用していく。
line,でプロットを作成して、linesに入れてゆく。
ax.set_titleでタイトルに平均値を表示。

アニメーションの表示

FuncAnimationでanimationの表示。fargs=(x,y,locs,lines)でupdate関数にいれる変数を指定しておく必要がある。
to_html5_videoでHTMLビデオ化。

分散を変化させるアニメーション

コード

でできるアニメーション

解説

データの生成

標準偏差(scales)を0.05〜5まで、sin波で変化させる。

アニメーションの設定

平均のアニメーションと同様。

参考

  1. [python]scipy statsの使い方 – Qiita
  2. Pythonでリスト(配列)の要素を削除するclear, pop, remove, del – nkmk note 

コメント