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

MatplotlibのアニメーションをPillowWriterでGIFファイルとして保存する方法

Pythonの可視化ライブラリMatplotlibでは、FuncAnimationを使って作成したアニメーションを、PillowWriterクラスを利用することで簡単にアニメーションGIFファイルとして保存できます。この記事では、正弦波(サインカーブ)が動くアニメーションを例に、GIFファイルを作成する手順を解説します。

GIFファイル作成の手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • plt.figure()で新しい図を作成するか、既存の図をアクティブにします。
  • 現在の図に軸(axes)を追加し、描画範囲(x軸・y軸のリミット)を指定します。
  • 空のリストを渡して線をプロットします(初期状態は何も表示されません)。
  • 初期化関数init()でも空のデータをセットし、アニメーションの開始状態を定義します。
  • アニメーション関数animate()内でサインカーブの値をフレームごとに更新し、線オブジェクトを返します。
  • PillowWriter()クラスを使ってムービーライターのインスタンスを取得します。
  • ani.save()メソッドで.gifファイルとして保存します。

コード例

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

# 図のサイズとレイアウトの自動調整を設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

def init():
    # 線の初期化(空データをセット)
    line.set_data([], [])
    return line,

def animate(i):
    # フレーム番号iに応じてサインカーブを更新
    x = np.linspace(0, 2, 1000)
    y = np.sin(2 * np.pi * (x - 0.01 * i))
    line.set_data(x, y)
    return line,

# アニメーションオブジェクトを生成
ani = animation.FuncAnimation(fig, animate, init_func=init,
                              frames=200, interval=20, blit=True)

# PillowWriterでFPSを25に設定してGIFとして保存
writer = animation.PillowWriter(fps=25)
ani.save("sine.gif", writer=writer)

コードのポイント

FuncAnimationの主な引数は以下の通りです。

  • frames: アニメーションの総フレーム数(ここでは200フレーム)。
  • interval: フレーム間の更新間隔(ミリ秒単位。ここでは20ミリ秒)。
  • blit: Trueにすると変化した部分だけを再描画し、パフォーマンスが向上します。

また、PillowWriter(fps=25)fps引数で、保存されるGIFの1秒あたりのフレーム数を指定できます。値を大きくすると滑らかな動きになりますが、ファイルサイズも大きくなる点に注意してください。

スクリプトを実行すると、カレントディレクトリにsine.gifという名前で、左右に移動するサイン波のアニメーションGIFが生成されます。ブラウザや画像ビューアで開けば、動くグラフを確認できます。

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

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

  2. Pythonでディレクトリとファイルを一覧表示する方法を徹底解説

    Pythonには、指定したパス内のファイルやディレクトリを一覧表示するための方法がいくつかあります。この記事では、osモジュールを使った基本的な方法から、条件に応じた絞り込み、再帰的な探索まで、実用的なテクニックをわかりやすく解説します。 os.listdir()でファイルとディレクトリの一覧を取得する 特定のパスにあるすべてのファイルやディレクトリを取得する最も簡単な方法のひとつが、os.listdir()メソッドを使うことです。 import os for x in os.listdir(.): print(x) 実行結果 .pytest_cache 4forces.json