はじめに
この記事では、matplotlibのアニメーション表示に使用される2つの関数「FuncAnimation」と「ArtistAnimation」の違いについて解説します。同じアニメーションを両方の方法で実装し、それぞれの特徴や使い分けのポイントを比較検討しています。
FuncAnimationの特徴
FuncAnimationは、更新関数(update function)を定義し、その関数を一定間隔で呼び出すことでアニメーションを生成します。更新関数は各フレームごとに実行され、グラフの状態を変更します。
- メリット: メモリ効率が良く、長時間のアニメーションや無限ループに適しています
- リアルタイム処理: データが逐次的に生成される場合に適しています
- 柔軟性: 各フレームで複雑な計算や条件分岐を行うことができます
ArtistAnimationの特徴
ArtistAnimationは、事前に各フレームの画像(Artist objects)をリストとして用意し、それを順番に表示することでアニメーションを生成します。
- 事前準備型: すべてのフレームを事前に生成するため、表示時の処理が軽くなります
- 細かい制御: 各フレームを個別に細かく制御できます
- メモリ消費: すべてのフレームをメモリに保持するため、フレーム数が多い場合はメモリ消費が大きくなります
コード
コード(ArtistAnimation)
コード(FuncAnimation)
解説
モジュールのインポート
データ生成関数
関数generateはZデータ出力用の関数となります。
AritistAnimationによるアニメーション
ArtistAnimationによるアニメーションの表示ついては下記で解説しました。

FuncAnimationによるアニメーション
FuncAnimationでは事前にZ_listにZのデータを生成しておき、update関数でwireframeグラフを消去して再表示する処理を繰り返すことでアニメーションを実現しています。
ファイルサイズの比較
ArtistAnimationで保存したmp4ファイルのサイズは465 KB、FuncAnimationで保存したmp4ファイルのサイズは359 KBでした。つまり、FuncAnimationの方がArtistAnimationより軽量なファイルを生成することがわかりました。
コードの所要時間の比較
ArtistAnimationの所要時間計測
FuncAnimationの所要時間計測
ArtistAnimationが1分26秒かかったのに対して、FuncAnimationは17.6秒で済み、FuncAnimationの方が実行時間が大幅に短いことがわかりました。
パフォーマンスの考慮点
アニメーションを作成する際は、パフォーマンスについても考慮する必要があります。特に大量のデータを扱う場合や、複雑な計算を行う場合は、以下の点に注意しましょう。
- blitパラメータの活用: True に設定すると、変更された部分のみを再描画するため、パフォーマンスが向上します
- フレームレートの調整: interval パラメータで調整可能です
- 描画要素の最適化: 必要最小限の描画要素に抑えることでパフォーマンスが向上します
まとめ
FuncAnimationとArtistAnimationはどちらもmatplotlibでアニメーションを作成するための強力なツールですが、異なるアプローチと特性を持っています。アニメーションの目的、データの性質、メモリ制約などを考慮して、適切な方を選択することが重要です。リアルタイムや動的なデータの可視化にはFuncAnimation、事前に計算された複雑なフレームのアニメーションにはArtistAnimationが適しています。
コメント