Pythonでグラフ(Matplotlib)のアニメーションを作る(ArtistAnimation編)

Pythonのmatplotlibを使って、グラフのアニメーションを作ります。ここでは、アニメーションに使うデータをあらかじめ準備しておく方法を説明します。パラパラアニメの要領ですね。

目次

  1. Matplotlibでアニメーションを作る手順
  2. matplotlib.animation.ArtistAnimationクラスの使い方
  3. saveメソッドの使い方
  4. グラフのアニメーションの作成例

Matplotlibでアニメーションを作る手順

  1. Figureコンテナを作る。
  2. プロットするデータを作って、アニメーションに必要な枚数だけコンテナにプロットする。
  3. プロットしたFigureを指定して、ArtistAnimationクラスのインスタンスを作る。
  4. 表示、または保存。

無地の用紙にグラフをプロットしたものを沢山準備しておいて、パラパラめくるようなイメージです。

この記事のサンプルコードでは、GIF出力の際にImageMagickを使用します。この他に、 Pillowを使う方法 や、 OpenCVを使う方法 もあります。

matplotlib.animation.ArtistAnimationクラスの使い方

ArtistAnimationクラスのインスタンスを作ります。

import matplotlib.animation as animation

ani = animation.ArtistAnimation(fig, artists, [interval], [repeat_delay], [repeat], [blit])
変数 内容
fig Figure アニメーションにつかう図のインスタンス。
artists list アニメーションするデータ。
interval number 省略可。規定値は200。フレームの切り替え間隔。ミリ秒。
repeat_delay number 省略可。規定値はNone。リピートするときの切り替え時間。ミリ秒。
repeat bool 省略可。規定値はTrue。リピートするかどうか。
blit bool 省略可。規定値はFalse。
ani   ArtistAnimationクラスのインスタンス。

saveメソッドの使い方

アニメーションを保存するためのメソッドです。

ani.save(filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs)
変数 内容
filename str 出力先ファイル名。
writer MovieWriterまたはstr 省略可。規定値はシステムの設定による。
fps number 省略可。規定値はNone。フレーム/秒。
dpi number 省略可。規定値はシステムの設定による。解像度。
codec str 省略可。規定値はシステムの設定による。ビデオのコーデック。
bitrate number 省略可。規定値はシステムの設定による。キロビット/秒。
extra_args list 省略可。規定値はシステムの設定による。追加の設定。
metadata dict 省略可。ファイルに記録するメタデータ。
extra_anim list 省略可。追加するAnimationインスタンス。
savefig_kwargs dict 省略可。

グラフのアニメーションの作成例

正弦波を少しずつ動かすアニメーションを描いてみます。

Macで実行するのですが、実行前にimagemagickのインストールが必要です。

$ brew install imagemagick

Mac以外の環境ではどうするんだろ。

コードです。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()

x = np.linspace(0, 2*np.pi, 201)
ims = []
for i in range(100):
    y = np.sin(x + float(i)/50.0)
    im = plt.plot(x,y,'b')
    ims.append(im)

ani = animation.ArtistAnimation(fig, ims, interval=50)

# plt.show() # これを実行するとアニメーションが表示される。

ani.save('animation_test.gif', writer='imagemagick')

imsというリストにpyplot.plotのインスタンスを追加していって、ArtistAnimationコンストラクタに指定するという感じです。

出力されるgifファイルは、このようになります。

グラフのアニメーション

広告

Pythonでグラフカテゴリの投稿