Matplotlibでグラフのアニメーションを作成#
※記事内に商品プロモーションを含むことがあります。
公開日
MatplotlibのFuncAnimation
クラスを使用してグラフのアニメーションを作成する方法を解説します。
アニメーションの例#
点が移動するアニメーションを作成し、GIFファイルとして保存する例を示します。
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
def update(x: float):
ax.clear()
ax.plot(x, 2*x, marker="o")
ax.set_xlim(0, 10)
ax.set_ylim(0, 20)
ax.grid()
anim = FuncAnimation(fig, update, frames=range(10), interval=500)
anim.save("point-animation.gif", writer="pillow")
plt.close()
上記のコードを実行すると、以下のGIFファイルが保存されます。
FuncAnimationクラス#
FuncAnimation
クラスは、グラフを更新する関数を用いてアニメーションを作成するクラスです。
FuncAnimation
の主な引数を解説します。
FuncAnimation(fig, func, frames, interval=200)
fig
: MatplotlibのFigure
オブジェクトfunc
: グラフを更新する関数frames
: 各フレームに対応するイテレータinterval
: フレーム間の周期[ミリ秒]
frames
の要素の数だけfunc
の関数を実行してアニメーションのフレームを作成します。
また、frames
の各要素は、func
関数の最初の引数として与えられます。
上記の例ではframes=range(10)
であるため、0, 1, 2, ...がupdate()
関数の引数x
に与えられます。
グラフの保存#
FuncAnimation
オブジェクトのsave()
メソッドでアニメーションを保存します。
writer
引数にはMovieWriter
(動画を書き込むソフト)を指定します。
上記の例ではpillow
を使用しています。もしインストールされていなければ以下のコマンドでインストールします。
pip install pillow
グラフの描画#
例でグラフを描画した以下の関数について解説します。
def update(x: float):
ax.clear()
ax.plot(x, 2*x, marker="o")
ax.set_xlim(0, 10)
ax.set_ylim(0, 20)
ax.grid()
ax.clear()
で前のフレームの描画を消去しています。
前のフレームを残したい場合は不要です。
また、全てのフレームでx軸、y軸の範囲を揃えるため、set_xlim
, set_ylim
を実行しています。