MatplotlibのFuncAnimationでアニメーションを作成する方法|サブプロット活用の基本
Matplotlibでは、FuncAnimationクラスを利用することで、グラフを少しずつ更新しながら動的なアニメーションを簡単に作成できます。ここでは、サイン波を順次プロットしていくアニメーションを例に、その基本的な実装手順をわかりやすく解説します。
アニメーション作成の手順
- 図のサイズと余白の設定:figureサイズを指定し、サブプロット間および周囲のパディングを自動調整します。
- 図とサブプロットの作成:plt.subplots()でFigureとAxesを生成します。
- 初期化関数(init)の定義:各フレームの描画前に軸範囲などを設定するためのユーザー定義関数を用意します。
- FuncAnimationによるアニメーション生成:指定した関数をフレームごとに繰り返し呼び出すことでアニメーションを作成します。
- animate関数の定義:フレーム番号を受け取り、新しいデータ点を追加してラインオブジェクトを更新します。
- 表示:plt.show()メソッドでアニメーションを画面に表示します。
コード例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'r*')
def init():
ax.set_xlim(0, 100)
ax.set_ylim(-1, 1)
return ln,
def animate(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
ani = FuncAnimation(fig, animate, init_func=init, blit=True, frames=100)
plt.show()
コードのポイント
- init()関数:X軸を0〜100、Y軸を-1〜1に固定することで、フレームが切り替わっても軸スケールが変わりません。
- animate(frame)関数:引数frameには0から99までの整数が順に渡され、呼び出されるたびに座標(x, sin(x))がリストへ追加されます。
- blit=True:変更のあった部分のみを再描画するため、描画パフォーマンスが向上します。
- frames=100:アニメーションは合計100フレーム分生成されます。
実行結果
このコードを実行すると、赤い星形マーカー(r*)で描かれたサイン波が左から右へと徐々に描き進められるアニメーションが表示されます。なお、Jupyter Notebook上で確実に再生したい場合は、IPython.displayのHTML(ani.to_jshtml())を併用すると便利です。
-
Matplotlibでnumpyのdatetime64型の時系列データをプロットする方法
PythonのMatplotlibを使って時系列データをグラフ化する方法を解説します。日付や時刻のデータ(datetime64型など)は、そのままplot()メソッドに渡すだけで自動的に軸に反映されるため、非常に簡単です。基本的な手順numpyを使ってx(日時)とy(数値)のデータを作成する。plot()メソッドで作成したxとyをプロットする。show()メソッドで図を表示する。サンプルコードimport matplotlib.pyplot as plt import datetime import numpy as np plt.rcParams[figure.figsize] = [7.
-
Matplotlibで2本の点線をプロットする方法|マーカー・線種・凡例の設定も解説
はじめに この記事では、Pythonの可視化ライブラリ「Matplotlib」を使って、2本の線を1つのグラフに描画し、それぞれに異なる線種(点線・破線)や色、太さを設定する方法を解説します。 コーディングを始める前に、まず次のコマンドでMatplotlibをインポートしておきましょう。 import matplotlib.pyplot as plt Pyplotは、MatplotlibをMATLABのように直感的に操作できるようにするためのコマンドスタイル関数のコレクションです。グラフの描画からラベル付けまで、ほとんどの操作をこのモジュール経由で行います。 アルゴリズム(処理の流れ) ステ