目次
概要
matplotlib で、animation.ArtistAnimation
または animation.FuncAnimation
を使用して、アニメーションするグラフを作成する方法について解説します。
animation.ArtistAnimation
使い方
animation.ArtistAnimation
は予め、使用するすべてのフレームを作成してから、アニメーションを作成するためのオブジェクトです。
- 引数
- fig: Figure オブジェクト
- artists: Artist
- interval: 各フレームのインターバルを ms で指定する。デフォルトは 200 ms。
- repeat_delay: リピートする場合、リピートする前の遅延を ms で指定する。デフォルトは None。
- repeat: リピートするかどうか。デフォルトは True。
- bilit: blitting を使用して描画を高速化するかどうか。デフォルトは False。
matplotlib では、線や点など描画されるアイテムは Artist といいます。まず、各フレームを構成する Artist の一覧を作成します。
例えば、折れ線グラフを作成する Axes.plot() は、返り値として [lines.Line2D] を返します。これが1フレームを構成する Artist になります。
In [1]:

JupyterLab で表示する場合
ani.to_jshtml()
の返り値を IPython.display.HTML()
に渡すことで、Notebook 上にインラインでアニメーションが表示できます。
In [2]:

複数の Axes がある場合
複数の Axes がある場合、各フレームで表示する Artist は折れ線2つなので、以下のようになります。
In [3]:

animation.FuncAnimation
予め各フレームを作成するのではなく、リアルタイムにアニメーションのフレームを作成する場合は、animation.FuncAnimation を使用します。
- 引数
func
に1フレームの図を作成する関数を渡します。この関数は第1引数に現在のフレーム番号が渡されます。 func
が追加の引数をとる場合、FuncAnimation
オブジェクトを作成する際に、フレームごとに異なるデータはframes
引数、すべてのフレームで同じデータはfargs
引数で指定します。- アニメーションにする際に1フレームあたりの時間は
interval
にミリ秒で指定します。例えば、interval=500
とした場合、2fps のアニメーションになります。
- 引数
- fig: Figure オブジェクト
- func: 各フレームを生成する関数
- frames: 各フレームのデータ
- int: 現在のフレーム数が
func
に渡される。 - iterable, generator: 各要素が
func
に渡される。
- int: 現在のフレーム数が
- init_func: 各フレームを初期化する関数
- fargs: func に渡す引数。
- save_count: キャッシュするフレーム数
- interval: 各フレームのインターバルを ms で指定する。デフォルトは 200 ms。
- repeat_delay: リピートする場合、リピートする前の遅延を ms で指定する。デフォルトは None。
- repeat: リピートするかどうか。デフォルトは True。
- bilit: blitting を使用して描画を高速化するかどうか。デフォルトは False。
In [4]:

様々なアニメーション
等高線のアニメーション
Axes.contourf()
で等高線を作成した場合、その関数が返す contour.QuadContourSet
オブジェクトの collections
属性に等高線を構成する Artist の一覧が入っています。
In [5]:

画像のアニメーション
指定したディレクトリ内の画像を読み込み、imshow()
で連続して表示するアニメーションのサンプルです。
In [6]:

コメント
コメント一覧 (0件)
参考になりました。
見出しと文中でいくつかArtistAnimationがFuncAnimationになっている箇所があるので直しておいたほうがよいかもです。
お返事が遅くなりすみません。
ご指摘ありがとうございます。間違っている部分を修正しました。