Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで時系列データのプロットをアニメーション化する方法

Matplotlibのプロットで、時系列に沿ったデータの変化をアニメーションとして表示したい場合があります。本記事では、TkAggバックエンドのafter()メソッドを活用し、時系列シーケンスを滑らかにアニメーション化する手順を解説します。

アニメーション化の手順

  • 図(figure)のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • 新しい図を作成するか、既存の図をアクティブにします。
  • サブプロット配置の一部として、図にAxes(座標軸)を追加します。
  • after()メソッドを使用して、指定したミリ秒経過後に指定の関数を呼び出すようスケジュールします。
  • アニメーション処理を行うanimate()メソッドを作成します。データはimshow()により、2Dの通常ラスタ(正規格子)上に画像として描画されます。
  • 最後にshow()メソッドで図を表示します。

コード例

import numpy as np
import matplotlib

matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()
ax = fig.add_subplot(111)

def animate():
    data = np.random.randn(5, 5)
    im = plt.imshow(data, cmap="plasma")
    for i in np.arange(1, 100):
        data = np.random.randn(5, 5)
        im.set_data(data)
        fig.canvas.draw()
win = fig.canvas.manager.window
fig.canvas.manager.window.after(10, animate)
plt.show()

コードのポイント

この例では、matplotlib.use('TkAgg')でTkAggバックエンドを明示的に指定している点が重要です。after(10, animate)により、ウィンドウが表示されてから10ミリ秒後にanimate()関数が呼び出されます。関数内では、np.random.randn(5, 5)で生成した5×5の乱数データをplasmaカラーマップでヒートマップとして描画し、im.set_data()で画像データを差し替えながら、fig.canvas.draw()でキャンバスを再描画しています。これにより、99回分のデータ更新が連続的に画面へ反映され、時系列変化がアニメーションのように見えます。

出力結果

Matplotlibで時系列データのプロットをアニメーション化する方法

  1. Matplotlibでpcolormeshをアニメーション化する方法【コード例付き解説】

    Matplotlibでpcolormesh(擬似カラープロット)をアニメーション化する方法を、具体的な手順とサンプルコード付きで解説します。 アニメーション化の基本的な流れ pcolormeshをアニメーションさせるには、以下の手順に従います。 figureオブジェクトとサブプロットを作成する numpyを使ってx、y、tのデータポイントを生成する meshgrid関数で座標ベクトルから座標行列(X3、Y3、T3)を作成する pcolormesh()メソッドを使って、不規則な矩形グリッド上に擬似カラープロットを描画する カラーバーをfigureに追加する FuncAnimationクラスを使

  2. Matplotlibで折れ線グラフをアニメーション化する方法を徹底解説

    Matplotlibでは、FuncAnimationを活用することで、折れ線グラフに動きのあるアニメーション効果を簡単に加えることができます。本記事では、基本的な手順と実際に動作するサンプルコードを交えながら、その方法をわかりやすく解説します。折れ線グラフをアニメーション化する基本手順subplots()メソッドを使用して、図(figure)とサブプロットを作成します。x軸・y軸それぞれの表示範囲(スケール)を設定します。NumPyを使って、xおよびtのデータ点を生成します。座標ベクトルからmeshgrid()で座標行列X2とT2を作成します。plot()メソッドでxとFのデータを使い、折れ線