Python – ArtistAnimationによる動画表示

概要

Pythonのmatplotlibにはanimationパッケージがあり、ArtistAnimationFuncAnimationの2つのクラスが準備されている。

  • ArtistAnimationは、予め動画に表示する各フレームを生成しておいて、これらを動画として表示する
  • FuncAnimationは、全結果を保存せず、フレームごとに描画を実行する関数を実行して、動画して表示する

ここでは、ArtistAnimationによる動画の表示方法を整理する(FuncAnimationについてはこちら)。

1つのグラフの表示

流れ

  1. animationパッケージ又はArtistAnimationクラスをインポート
  2. フレームの数だけグラフを描画してリストに保存
  3. フレームリストを渡してArtistAnimationインスタンスを生成
  4. 表示

処理ステップ

インポート

パッケージをインポートする

または

フレームリストの準備

動画の各フレームを保存するリストを準備する。animationパッケージでは、個々のグラフフレームをartistと表現している。

FigureとAxesオブジェクトを準備

フレームを描画するオブジェクトを準備しておく

フレーム数を指定して各フレームを保存する

以下ではフレーム数を20として、20回分のグラフを少しずつずらして描画して保存している。

ここではグラフを正弦波として、1周期分を20分割して表示させている。

  • ここではループごとにxを計算しているが、今回は全フレーム共通なので、ループの外で準備してもよい
  • plot命令のcolor指定をしないと、描画するごとに違うグラフとして色を変えて描画されてしまう
  • 描画結果はオブジェクトとして、先に準備したartistコレクションに追加している

アニメーション設定して表示させる

ArtistAnimationクラスのコンストラクターに必要な引数を与えてインスタンスを生成し、表示させる。intervalはフレーム間の待機時間で、ミリ秒で与える。

GIF画像として保存する

結果をGIF画像として保存するには、plt.show()を実行せず、以下のようにimagemagicでファイルとして書き出す。

実行結果

以下のような動画が表示される。

コード

全体の実行コードは以下のとおり。

複数のグラフの表示

流れ

全体の流れは単一のグラフの場合と同じ。リスト保存時に複数グラフを加算して重ね合わせるところだけが異なる。

  1. animationパッケージ又はArtistAnimationクラスをインポート
  2. フレームの数だけグラフを描画して、重ね合わせてリストに保存
  3. フレームリストを渡してArtistAnimationインスタンスを生成
  4. 表示

処理ステップ

以下の部分だけが単一グラフの場合と異なる。2つのグラフを描画し、そのオブジェクトを加算して1フレームとした上でartistsに追加している

実行結果

以下のように、2つのグラフが同時に表示される。

コード

全体の実行コードは以下のとおり。

図形を含むアニメーション

matplotlib.patchesによる図形を含んでアニメーション表示するには、少し工夫がいる。その方法はこちら

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です