[matplotlib animation] 66. 3次元ランダムウォークアニメーション

matplotlib Animation

はじめに

この記事では、matplotlibのFuncAnimationを使用して3次元空間でのランダムウォークアニメーションを作成する方法を解説しています。主なポイントは以下の通りです:

  • 3次元空間での確率的な動きを視覚化する技術
  • Pythonのmatplotlibライブラリを活用した動的グラフ作成
  • 物理現象(ブラウン運動)のシミュレーション方法

この記事を通じて、科学的データの動的な可視化技術を習得することができます。

コード

解説

モジュールのインポート

3Dグラフを作成するためにmpl_toolkits.mplot3d をインポートします。

バージョン

データの生成

3次元のx,y,zデータを極座標系で媒介変数によって生成します。この生成方法は以下のコード例でも使用しています。

[matplotlib 3D] 18. 3D surfaceプロットで球を表示
matplotlibのmplot3dを使用して3Dグラフ上にsurface plotで球体を表示する方法を解説します。球の方程式からメッシュグリッドを作成し、3次元空間に美しく球体を描画する手順を紹介します。

まず、x, y, zの座標をvstackでひとまとめにし、.Tで転置します。

次に、np.linalg.norm()にaxis=1を指定して各行のノルム(ベクトルの長さ)を計算します。

そのノルムで各要素を割ることで、各行のベクトルを規格化(正規化)します。

np.vstack(([[0,0,0]], xyz))を使って、スタート地点を原点[0,0,0]に設定します。

ランダムウォークの位置は、1Dや2Dの例と同様に、np.cumsum()で累積和を計算することで各ステップでの座標を取得します。

[matplotlib animation] 64. 1次元ランダムウォークアニメーション
matplotlibのFuncAnimationで1次元のランダムウォークアニメーションを表示する。
[matplotlib animation] 65. 2次元ランダムウォークアニメーション
matplotlibのFuncAnimationで2次元のランダムウォークアニメーションを表示する。

3次元のランダムウォークデータの表示

上記で作成したデータを表示すると以下のようになります。

上の図のx軸、y軸、z軸の表示範囲をax.get_xlim(), ax.get_ylim(), ax.get_zlim()で取得します。

アニメーションの表示

まず、p1で空のプロットを作成し、そこにデータを流し込みます。x、yデータの設定には set_data メソッドを使用し、zデータの設定には set_3d_properties メソッドを使います。x軸、y軸、z軸の表示範囲は、ax.set(xlim=xlim, ylim=ylim, zlim=zlim) のように、先ほど取得した値を使って設定します。

animation.FuncAnimation を使って ani オブジェクトを作成し、このオブジェクトに対して HTML(ani.to_html5_video()) を実行することで、Jupyter Lab(および Notebook)上でアニメーションを表示できます。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Animated 3D random walk — Matplotlib 3.1.2 documentation
numpy.random.choice — NumPy v1.15 Manual
numpy.cumsum — NumPy v2.3 Manual

コメント