[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パラメータをサイン波の形で-5から5まで変動させています。

アニメーションの設定

まず空のリスト「lines」を作成して、グラフを格納できるようにします。

アニメーションでは、新しいフレームを描画する前に古いプロットを削除する必要があります。すでに「lines」にグラフが存在する場合は、「lines.pop().remove()」でそれを削除します。 「loc=locs[num]」を使って、配列「locs」から順番に平均値を適用していきます。 「line,」でプロットを作成し、それを「lines」リストに追加していきます。 「ax.set_title」を使用して、タイトルに現在の平均値を表示します。

アニメーションの表示

FuncAnimationを使用してアニメーションを表示します。update関数に必要な変数はfargs=(x,y,locs,lines)で指定する必要があります。

to_html5_video関数を使用してアニメーションをHTML5ビデオ形式に変換できます。

分散が変化するアニメーション

コード

解説

データの生成

アニメーションの設定

まとめ

matplotlibのFuncAnimationを活用することで、正規分布の平均値や分散が変化する様子を動的に可視化できることがわかりました。このようなアニメーションは統計学や確率論の概念理解に役立ち、データの分布特性を直感的に把握するのに効果的です。

参考

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

コメント