はじめに
この手順に従った実験では、Python の Matplotlib を使って複数のサブプロット付きのアニメーションを作成する方法を示します。この例では、2 つの異なるサブプロットに円とサインカーブをアニメーション化する方法を示しています。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
最初のステップは、必要なライブラリをインポートすることです。これには、Matplotlib、NumPy、および Matplotlib のアニメーションモジュールが含まれます。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.patches import ConnectionPatch
グラフとサブプロットの作成
2 番目のステップは、アニメーションに使用するグラフとサブプロットを作成することです。この例では、異なるアスペクト比の 2 つのサブプロットを横並びに作成します。左のサブプロットは単位円で、右のサブプロットはサインカーブをアニメーション化するための空のプロットです。
fig, (axl, axr) = plt.subplots(
ncols=2,
sharey=True,
figsize=(6, 2),
gridspec_kw=dict(width_ratios=[1, 3], wspace=0),
)
axl.set_aspect(1)
axr.set_box_aspect(1 / 3)
axr.yaxis.set_visible(False)
axr.xaxis.set_ticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"])
円と初期点の描画
3 番目のステップは、左のサブプロットに円と初期点を描画することです。円を生成するために角度の配列を作成し、その後、各角度のサインとコサインをプロットします。また、原点に 1 点をプロットします。
x = np.linspace(0, 2 * np.pi, 50)
axl.plot(np.cos(x), np.sin(x), "k", lw=0.3)
point, = axl.plot(0, 0, "o")
サインカーブの描画
4 番目のステップは、右のサブプロットにサインカーブを描画することです。角度の配列を作成し、その後、各角度のサインをプロットします。また、アニメーションの後半で更新する sine プロットオブジェクトを保存します。
sine, = axr.plot(x, np.sin(x))
接続線の描画
5 番目のステップは、2 つのサブプロットを結ぶ点線を描画することです。左のサブプロットの原点と右のサブプロットの右辺を結ぶ ConnectionPatch オブジェクトを作成します。また、アニメーションの後半で更新する con パッチオブジェクトを保存します。
con = ConnectionPatch(
(1, 0),
(0, 0),
"data",
"data",
axesA=axl,
axesB=axr,
color="C0",
ls="dotted",
)
fig.add_artist(con)
アニメーション関数の定義
6 番目のステップは、アニメーション関数を定義することです。この関数はアニメーションの各フレームで呼び出され、左のサブプロット上の点の位置、右のサブプロット上のサインカーブの位置とデータ、接続パッチの位置を更新します。
def animate(i):
x = np.linspace(0, i, int(i * 25 / np.pi))
sine.set_data(x, np.sin(x))
x, y = np.cos(i), np.sin(i)
point.set_data([x], [y])
con.xy1 = x, y
con.xy2 = i, y
return point, sine, con
アニメーションの作成
7 番目のステップは、FuncAnimation 関数を使ってアニメーションオブジェクトを作成することです。グラフオブジェクト、アニメーション関数、フレーム間のインターバル(ミリ秒)、フレーム数、そしてアニメーションを繰り返す前の遅延を渡します。
ani = animation.FuncAnimation(
fig,
animate,
interval=50,
blit=False, ## blitting can't be used with Figure artists
frames=x,
repeat_delay=100,
)
アニメーションの表示
最後のステップは、pyplot モジュールの show 関数を使ってアニメーションを表示することです。
plt.show()
まとめ
この手順に従った実験では、Python の Matplotlib を使って複数のサブプロット付きのアニメーションを作成する方法を示しました。この例では、2 つの異なるサブプロットにまたがって円とサインカーブをアニメーション化する方法を示しました。手順には、ライブラリのインポート、グラフとサブプロットの作成、円と初期点の描画、サインカーブの描画、接続線の描画、アニメーション関数の定義、アニメーションオブジェクトの作成、そしてアニメーションの表示が含まれます。