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

matplotlib 3D

はじめに

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

コード

解説

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

[matplotlib 3D] 14. 3Dグラフの回転アニメーション
matplotlibのmplot3dを使用して3Dグラフの回転アニメーションを作成する方法を解説します。動画として保存する手順や回転角度の制御など、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を活用して滑らかな回転表現が可能であり、視覚的にわかりやすいデータ表現に役立ちます。

参考

外積を求めるnumpy.outer関数の使い方
NumPyには配列の要素同士の全ての組み合わせによる乗算を求める外積を行なってくれルouter関数が存在します。本記事では外積とouter関数についての解説をしました。
http://www.sol-j.co.jp/mailmag/a-0052.html
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 pyth...

コメント

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