Matplotlibでアニメーションを作る: FuncAnimation の使い方

Matplotlib
Sponsored

概要

PythonMatplotlibを使って、プロット内容が少しずつ変わっていく様子を動画として保存する方法についてまとめる。

今回は、2種類の気体分子が半径1の円の中で運動する様子の描画を例として用いた。

成果物

こんなのができる。

コードと解説

コード

解説

Matplotlibを使ってアニメーションを作ることができる。

とある関数にしたがってグラフが時間変化していく様子を動画にするためには、FuncAnimationを使うのが便利。この関数は、指定した関数(コードではupdate_plot)を一回一回実行しながら、そのプロット結果を動画の1フレームとして保存してくれる。

これにより、毎フレームごとの画像を1枚ずつ保存する、というような面倒な手間が省ける。

プロットは上書きを繰り返すので、前のプロットを削除してから次のプロットを追加する必要がある。そのため、プロット情報を配列imに保存して管理している。

ここでは、外枠の円(im[0])は残し、前回の_update_plot実行時に描画されたプロット(im[1], im[2])を削除してから新しいプロットを作成している。

この配列imと、描画先のfig変数を用いることを、FuncAnimation内でfargs=(fig, im)として伝えている。なお、繰り返し回数iは何も指定せずとも増えていく。

(補足)コード内の数学について

円内部の気体運動を数値計算するために、分子の座標を直交座標と極座標の間で適宜変換している。

プロットの際には直交座標の方が便利だが、乱数による気体位置の生成や壁との弾性衝突(速さ不変、方向・角度変化)の際には極座標の方が計算が楽になる。

Comments