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

MatplotlibのアニメーションでX軸の範囲を動的に更新する方法

Matplotlibのアニメーション機能を使うと、グラフを描画しながらX軸の表示範囲(xlim)をフレームごとに動的に変更できます。本記事では、FuncAnimationを活用してX軸の値を更新する具体的な手順とサンプルコードを紹介します。

実装の手順

X軸の値をMatplotlibアニメーションで更新するには、以下の手順に従います。

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • plt.subplots()を使って、図(figure)とサブプロット(axes)を作成します。
  • NumPyを使用して、xデータとyデータの点を生成します。
  • 軸オブジェクト(ax)のplot()メソッドでx・yのデータをプロットします。
  • フレームごとに呼び出される関数animateを定義し、その中でset_xlim()によりX軸の範囲を更新します。この関数を繰り返し呼び出すことでアニメーションを実現します。
  • show()メソッドを使って図を表示します。

サンプルコード

import matplotlib.pylab as plt
import matplotlib.animation as animation
import numpy as np

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

fig, ax = plt.subplots()
x = np.linspace(0, 15, 100)
y = np.sin(x)

ax.plot(x, y, lw=7)

def animate(frame):
   # フレーム番号に応じてX軸の右端を更新
   ax.set_xlim(left=0, right=frame)

ani = animation.FuncAnimation(fig, animate, frames=10)

plt.show()

コードの解説

このサンプルでは、0から15までの範囲で100個の等間隔な点を生成し、その正弦波(sinカーブ)を太い線で描画しています。

ポイントとなるのはanimate(frame)関数です。FuncAnimationは引数frames=10に従って0から9までのフレーム番号を順番に生成し、各フレームでanimate関数を呼び出します。関数内のax.set_xlim(left=0, right=frame)により、X軸の右端がフレーム番号に合わせて0→1→2…と拡大していきます。その結果、正弦波のグラフが左から右へ徐々に「開いていく」ようなアニメーション効果が得られます。

なお、アニメーションをGIFやMP4として保存したい場合は、ani.save("animation.gif", writer="pillow")のようにsave()メソッドを利用すると便利です。

実行結果

上記のコードを実行すると、X軸の表示範囲がフレームごとに広がっていくアニメーションが表示されます。

MatplotlibのアニメーションでX軸の範囲を動的に更新する方法MatplotlibのアニメーションでX軸の範囲を動的に更新する方法

  1. 【Python】MatplotlibでX軸の値(目盛りラベル)を設定する方法

    Python の Matplotlib でグラフの X 軸の値(目盛りラベル)を自由に設定したい場合は、plt.xticks() メソッドを使うのが最も簡単です。以下の手順で実装できます。 X軸の値を設定する手順 x と y のデータポイントを格納する2つのリストを作成します。 range(len(x)) を使って、目盛りの基準となるインデックス(xticks の範囲)を取得します。 plot() メソッドで、インデックスのリストと y データを使って折れ線グラフを描画します。 xticks() メソッドを使い、デフォルトの目盛りを実際の X 軸の値に置き換えます。 show() メソッドで

  2. PythonのMatplotlibでX軸に日付をプロットする方法

    Pythonで時系列データを可視化する際、X軸に日付を表示したいケースはよくあります。PandasとMatplotlibを組み合わせれば、日付をインデックスとしたデータフレームを作成し、gcf().autofmt_xdate()を使うことでX軸の日付表示を自動的に整形できます。実装の手順日付文字列のリストを作成し、pd.to_datetime()を使ってdatetime型に変換します。プロットするデータとして data = [1, 2, 3] を用意します。DataFrame() オブジェクト(ここではDF)を生成します。DFの value 列に手順2のデータを設定します。手順1で作成したda