[matplotlib animation] 3.球のz軸回転アニメーション

matplotlib 3D

はじめに

matplotlibのmplot3dで作成した球のsurface plotをZ軸に対して回転させたアニメーションについて解説します。

コード

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

解説

下記では、視点を回転させるアニメーションを作成しました。今回は、プロット自体を軸に対して回転するアニメーションを作成しました。

[matplotlib 3D] 14. 3Dグラフの回転アニメーション
matplotlib mplot3d のグラフの回転アニメーション

モジュールのインポート

3Dグラフにする設定

プロットするデータの生成

u, v は極座標でいうθとφとなります。極座標で球は以下の式で表せられます。

$$x=rcos\theta sin\phi, y=rsin\theta sin\phi, z=rcos\phi$$

プロットできるようにするために、meshgrid状のデータを作成します。
np.outer()は外積で、2つのデータの要素の全てを掛け合わせます。
np.size()は要素を返してくれるのでnp.size(u)は100となります。
np.ones(np.size(u))はnp.ones(100)となるので1が100個のデータができることになります。

軸の範囲、ラベルの設定

ax.set_aspect(‘equal’)は3dグラフでは使えません。

3D surfaceグラフの作成

plotは[]で囲んでリストにする必要があります。

アニメーションで表示するグラフの設定

このanimationは、plot[0]を随時更新していくことでアニメーションとします。
よって、最初に前のグラフをremove()で取り除きます。
そして、回転したデータを生成します。回転角をγとすると、Z軸周りに角度γ回転したときの式は、

$$x’=xcos\gamma – ysin\gamma\\y’=xsin\gamma + ycos\gamma\\z=z$$

となります。

アニメーションの設定

FuncAnimationでアニメーションを作成します。
figにupdateのanimatonを描いて、frame数は100とし、intervalは100 msなので10 sの動画となります。fargsはupdateに渡す引数なので、x,y,z,uとplotを入れる必要があります。

HTMLの.to_html5_video()でアニメーションをHTML5で表示できます。

参考

外積を求めるnumpy.outer関数の使い方
NumPyには配列の要素同士の全ての組み合わせによる乗算を求める外積を行なってくれルouter関数が存在します。本記事では外積とouter関数についての解説をしました。
A.052. 3次元回転と極座標表示|エスオーエル株式会社
Generate animation of 3D surface plot using plot_surface and animation.ArtistAnimation in Python and matplotlib.pyplot
This page shows how to generate an animation of 3D surface plot using plot_surface and animation.ArtistAnimation in python and matplotlib.pyplot.

コメント

  1. […] [matplotlib animation] 3.球のz軸回転アニメーションmatplotlibのmplot3dで作成した球のsurface plotをZ軸に対して回転させたアニメーションについて解説します。sabopy.com2018.11.19 […]