Matplotlibでグラフのアニメーションを作成

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ファイルが保存されます。

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