はじめに
この記事はmatplotlibのmplot3dを使用して3D球体モデルをZ軸周りに回転させるアニメーションの作成方法を解説しています。Pythonを使った3Dアニメーションの実装について、基本から応用まで詳しく説明されています。
コード
解説
下記では、視点を回転させるアニメーションを作成しました。今回は、プロット自体を軸に対して回転するアニメーションを作成しました。

モジュールのインポート
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は[]で囲んでリストにする必要があります。
アニメーションで表示するグラフの設定
このアニメーションは、plot[0]を随時更新することで実現します。
そのため、まず前のグラフをremove()メソッドで削除します。
次に、回転したデータを生成します。Z軸周りの回転角をγとすると、角度γ回転したときの式は次のようになります:
$$x’=xcos\gamma – ysin\gamma\\y’=xsin\gamma + ycos\gamma\\z=z$$アニメーションの設定
FuncAnimationを使用してアニメーションを作成します。figオブジェクトにupdateアニメーションを描画し、フレーム数は100に設定します。intervalが100msであるため、アニメーション全体の長さは10秒になります。fargsパラメータにはupdate関数へ渡す引数(x、y、z、uおよびplot)を指定する必要があります。
また、.to_html5_video()メソッドを使用することで、アニメーションをHTML5形式で表示できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
matplotlibとmplot3dを使用することで、3D球体モデルのZ軸回転アニメーションが実装できます。FuncAnimationを活用して滑らかな回転表現が可能であり、視覚的にわかりやすいデータ表現に役立ちます。
参考


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