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

matplotlib Animation

はじめに

この記事では、matplotlibのFuncAnimationを使用して、3Dグラフの軸範囲を更新するアニメーションの作成方法について解説しています。3D空間内でデータを表示しながら、視点や表示範囲を変更するアニメーション効果を実現する方法を、具体的なコード例とともに紹介しています。

コード

解説

モジュールのインポート

軸と軸ラベルの設定

視点を変える設定には、ax.view_init(elev=15, azim=-60)を使用します。

elevはElevation viewing angleの略で、視点の高さを設定します(デフォルト値は30)。

azimはAzimuthal viewing angleの略で、方位角を設定します(デフォルト値は-60)。

データの生成

双曲面は媒介変数でデータを生成するため、まず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()で消去できます。

パラメータcの部分をc[num]に設定することで、Zの値を順次増加させていきます。

zmin, zmax = ax.get_zlim()を使用して、現在表示中のグラフのz軸範囲を取得します。zminの初期値は-10に設定されています。Z[0,0]にはzの最小値が格納されているため、この値がzminより小さくなった場合、ax.set_zlim(2zmin, 2zmax)で軸範囲を2倍に拡大します。その後、plot[0]に新しい3Dグラフをプロットします。

アニメーションの表示

FuncAnimationを使用してアニメーションを表示します。updateのnumパラメータを100に設定しているため、フレーム数は100になります。interval=100に設定しているので、100フレーム×100ミリ秒=10,000ミリ秒=10秒のアニメーションが生成されます。

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

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

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

まとめ

matplotlibのFuncAnimationを使用することで、3Dグラフの軸範囲を動的に更新するアニメーションを作成できます。これにより、データの特定部分にフォーカスしたり、異なる視点からデータを観察したりする効果的な可視化が可能になります。

参考

Matplotlib > view_init(elev=None, azim=None)のデフォルト値 > elev = 30, azim = -60 - Qiita
動作環境 GeForce GTX 1070 (8GB) ASRock Z170M Pro4S Ubuntu 16.04 LTS desktop amd64 TensorFlow v1.2.1 cuDNN v5.1 for Linux...
[matplotlib animation] 5. Decay(軸の更新アニメーション)
Pythonのmatplotlibライブラリを使った減衰現象のアニメーション表示方法を解説。特に時間とともに変化するグラフの軸を動的に更新する手法に焦点を当て、FuncAnimationクラスの活用法やコード例を提供しています。

コメント