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を実行しています。