はじめに
この実験では、Matplotlib を使って 3 次元プロットを全ての軸について回転させる簡単なアニメーションを作成する方法を学びます。サンプルデータセットを使って基本的なワイヤーフレームを作成し、軸のラベルを設定し、軸を回転させます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリとデータセットのインポート
まず、必要なライブラリとデータセットをインポートする必要があります。この例では、3 次元プロットを作成するためにmatplotlibとmpl_toolkits.mplot3dライブラリを使用し、サンプルデータセットを生成するためにaxes3d.get_test_data()関数を使用します。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
## Generate sample dataset
X, Y, Z = axes3d.get_test_data(0.05)
3 次元プロットの作成
次に、plt.figure()とfig.add_subplot()関数を使って 3 次元プロットを作成します。また、ax.plot_wireframe()関数を使ってデータセットをワイヤーフレームとしてプロットします。
## Create 3D plot
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
## Plot wireframe
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
軸ラベルの設定
次に、ax.set_xlabel()、ax.set_ylabel()、およびax.set_zlabel()関数を使って 3 次元プロットの軸ラベルを設定します。
## Set axis labels
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
軸を回転させてプロットを更新する
最後に、仰角、方位角、ロールの完全な回転を繰り返す for ループを使って軸を回転させ、プロットを更新します。ax.view_init()関数を使って軸のビューとタイトルを更新し、plt.title()、plt.draw()、およびplt.pause()関数を使ってアニメーションを表示します。
## Rotate the axes and update the plot
for angle in range(0, 360*4 + 1):
## Normalize the angle to the range [-180, 180] for display
angle_norm = (angle + 180) % 360 - 180
## Cycle through a full rotation of elevation, then azimuth, roll, and all
elev = azim = roll = 0
if angle <= 360:
elev = angle_norm
elif angle <= 360*2:
azim = angle_norm
elif angle <= 360*3:
roll = angle_norm
else:
elev = azim = roll = angle_norm
## Update the axis view and title
ax.view_init(elev, azim, roll)
plt.title('Elevation: %d°, Azimuth: %d°, Roll: %d°' % (elev, azim, roll))
## Display animation
plt.draw()
plt.pause(.001)
まとめ
この実験では、Matplotlib を使って 3 つの軸について回転する簡単な 3 次元プロットのアニメーションを作成する方法を学びました。サンプルデータセットを使って基本的なワイヤーフレームを作成し、軸ラベルを設定し、軸を回転させました。また、ax.view_init()、plt.title()、plt.draw()、およびplt.pause()関数を使ってプロットを更新し、アニメーションを表示する方法も学びました。