[matplotlib animation] 8. 3Dグラフの軸範囲更新アニメーション

matplotlib Animation

はじめに

matplotlib FuncAnimationによる軸範囲更新アニメーションについて解説する。

コード

解説

モジュールのインポート

軸と軸ラベルの設定

視点を変える設定は、ax.view_init(elev=15, azim=-60)。
elevはElevation viewing angle の略で、視点の高さの設定。(default=30)
azimはAzimuthal viewing angleの略で、方位角の設定。(default=-60)[1]

データの生成

双曲面は媒介変数でデータを生成するので、uとvを先に作成してmeshgridする。
双曲面は媒介変数で以下のようになる。

$$X = cosh(u)*cos(v)\\ Y = cosh(u)*sin(v)\\ Z = sinh(u)$$

ここで、cをnp.linspace(0,10,100)として、0〜10まで100stepで変化させていく。

アニメーションの設定

plotに最初に表示するグラフをプロットしておく。[]で囲んでリストにしておく。

アニメーションでは古いプロットを消す必要がある。
3Dグラフの場合、plot[0].remove()で消すことができる。

Zのcのところをc[num]にして、Zを順次大きくしていく。

zmin, zmax = ax.get_zlim()で、今plotしている図のz軸の範囲を得る。
zminは初期設定で-10にしてある。
Z[0,0]には、zの最も小さい値が入っているので、この値がzminを下回ったとき、
ax.set_zlim(2*zmin, 2*zmax)で軸範囲を2倍にしていく。
そして、plot[0]に3Dグラフをプロットする。

アニメーションの表示

FuncAnimationでanimationの表示。updateのnumを100としているので、frame数は100とする。interval=100なので、100 frames×100 ms = 10000 ms = 10秒のアニメーションとなる。
to_html5_videoでHTMLビデオ化。

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

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

参考

Matplotlib > view_init(elev=None, azim=None)のデフォルト値 > elev = 30, azim = -60 - Qiita
GeForce GTX 1070 (8GB)ASRock Z170M Pro4S Ubuntu 16.04 LTS desktop amd64Tensor…
[matplotlib animation] 5. Decay(軸の更新アニメーション)
python, matplotlibのanimationにおける軸の更新について説明する。

コメント