はじめに
Matplotlib は、Python で静的、アニメーション、インタラクティブなビジュアライゼーションを作成するために使用されるデータ可視化ライブラリです。この実験では、Matplotlib を使ってアニメーションプロットを作成する方法を学びます。減衰するサイン波のアニメーションを作成するために、FuncAnimationクラスを使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
まず、必要なライブラリをインポートする必要があります。この実験では、Matplotlib と NumPy を使用します。
import itertools
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
データ生成関数を作成する
次に、アニメーション用のデータを生成する関数を作成する必要があります。この関数は、時間とともに減衰するサイン波を生成します。itertools.count()関数を使って、無限の数のシーケンスを生成します。これらの数を使って、サイン波の値を計算します。
def data_gen():
for cnt in itertools.count():
t = cnt / 10
yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
グラフを設定する
次に、グラフを設定する必要があります。Matplotlib のsubplots()関数を使って、グラフと軸のオブジェクトを作成します。また、サイン波を表す線のオブジェクトも作成します。
fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []
初期化関数を定義する
グラフの初期状態を設定する初期化関数を定義する必要があります。この関数では、y 軸の範囲を設定し、線オブジェクトのデータをクリアします。
def init():
ax.set_ylim(-1.1, 1.1)
ax.set_xlim(0, 1)
del xdata[:]
del ydata[:]
line.set_data(xdata, ydata)
return line,
アニメーション関数を定義する
次に、アニメーションの各フレームに対してグラフを更新する関数を定義する必要があります。この関数は、data_gen()関数で生成されたデータを受け取り、新しいデータでグラフを更新します。また、アニメーションが進行するにつれて x 軸の範囲も更新します。
def run(data):
## update the data
t, y = data
xdata.append(t)
ydata.append(y)
xmin, xmax = ax.get_xlim()
if t >= xmax:
ax.set_xlim(xmin, 2*xmax)
ax.figure.canvas.draw()
line.set_data(xdata, ydata)
return line,
アニメーションを作成する
最後に、FuncAnimationクラスを使ってアニメーションを作成できます。アニメーションを作成するために、fig、run、data_gen、init_func、およびintervalパラメータを渡します。また、最後の 100 フレームのみが保存されるように、save_countパラメータを 100 に設定します。
ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,
save_count=100)
グラフを表示する
これで、Matplotlib のshow()関数を使ってグラフを表示できます。
plt.show()
まとめ
この実験では、Matplotlib を使ってアニメーション付きのグラフを作成する方法を学びました。減衰するサイン波のアニメーションを作成するためにFuncAnimationクラスを使用しました。また、グラフの設定方法、データ生成関数の定義方法、初期化関数の定義方法、アニメーション関数の定義方法、およびアニメーションの作成方法についても学びました。