[matplotlib 3D] 26. 3D wireframe plotでanimation

matplotlib 3D
スポンサーリンク
スポンサーリンク

はじめに

matplotlib mplot3dの3D wireframe plotをanimation表示する方法について解説する。

スポンサーリンク

コード

↑をjupyter notebookで実行した結果、

%matplotlib nbagg
Warning: Cannot change to a different GUI toolkit: nbagg. Using notebook instead.

とでてアニメーションが表示されなかった。

%matplotlib notebook

としてもアニメーションが表示されず、下の画像が表示された。

そこで、ArtistAnimationを使って書き改めた。[1]

コードその2

これでできた動画。

スポンサーリンク

解説

def generate(X, Y, phi):
R = 1 - np.sqrt(X2 + Y2)
return np.cos(2 * np.pi * X + phi) * R

Zのデータ出力用の関数。

phi = np.linspace(0, 180. / np.pi, 100)
ims = []
for i in range(100):
at_z = phi[i]
Z = generate(X,Y,at_z)
im = ax.plot_wireframe(X, Y, Z, rstride=2, cstride=2)
ims.append([im])

imsで空のリストを作成。
phiの0個目から100個目まで順次 Zのdataを作成して、wireframeでプロットを作成。
imsにimをappendで追加していく。
ここで[im]と[]で囲むのが大事。[2]
imsが図のリストとなる。

ani = animation.ArtistAnimation(fig, ims, interval=100)

ArtistAnimationでアニメーションを作成。
figはmatplotlibのfig
imsはplotのリスト
interval は図の表示時間[ms][3]

HTML(ani.to_html5_video())

アニメーションをIPythonの HTML displayで表示する。to_html5_videoでHTML5 でアニメーションをエンコードできる [4]

下の図のように表示されるので、・・・と縦に並んでいるところからダウンロード可能。

スポンサーリンク

参考

  1. matplotlib.animation.ArtistAnimation
  2. matplotlib でアニメーションを作る – Qiita
  3. matplotlibで簡単にアニメーションをつくる(mp4, gif) – Qiita
  4. Embedding Matplotlib Animations in Jupyter as Interactive JavaScript Widgets

コメント