実験での数値モニターや機械学習や深層学習の数値データがどのように改善されているかなど,リアルタイムでデータを可視化したいことはよくあります
本記事では,pythonのMatplotlibでグラフをリアルタイムで表示する方法を解説します
pause関数とremove関数を用いて実装します
簡単に実装する方法だけでなく,凡例をいれたり,グラフの色をレインボーにする方法も紹介します
目次
簡単にグラフをリアルタイムで表示する (pause)
Matplotlibでグラフをリアルタイムで表示するには,pyplot.pauseという関数を使います
pause関数の使い方
- pause(数値)
-
括弧の中に数値を指定すると,その秒数だけ停止します
- 例
-
plt.pause(0.001)
こちらは,x,y1,y2のリストにappendして折れ線グラフを描画しています
import numpy as np
import matplotlib.pyplot as plt
# step1 データの作成
xs = []
y1 = []
y2 = []
# step2 グラフフレームの作成
fig, ax = plt.subplots()
# step3 リアルタイムでグラフを更新
for x in np.linspace(0, 10, 100):
# 値を更新
xs.append(x)
y1.append(4 + 2 * np.sin(2 * x))
y2.append(4 + 2 * np.cos(2 * x))
# グラフ描画
ax.plot(xs, y1, color='C0', linestyle='-')
ax.plot(xs, y2, color='C1', linestyle='--')
ax.set_xlabel('X label')
ax.set_ylabel('Y label')
# 0.001秒停止
plt.pause(0.001)
凡例付きでグラフをリアルタイムで表示する (remove)
リアルタイムでグラフを表示する際に凡例をつけるには,毎度グラフを削除する必要があります
そこでAxes.remove関数でグラフを削除します
remove関数の使い方
- グラフオブジェクト.remove()
-
removeの直前にax.plotで作成したグラフオブジェクトをドットで繋ぐと削除されます
- 例
-
line1, = ax.plot(xs, y1)
line1.remove()
# step3 リアルタイムでグラフを更新
for x in np.linspace(0, 10, 100):
# 値を更新
xs.append(x)
y1.append(4 + 2 * np.sin(2 * x))
y2.append(4 + 2 * np.cos(2 * x))
# グラフ描画
line1, = ax.plot(xs, y1, color='C0', linestyle='-', label='Sample1')
line2, = ax.plot(xs, y2, color='C1', linestyle='--', label='Sample2')
# 0.001秒停止
plt.pause(0.001)
# 描画したグラフを削除
line1.remove()
line2.remove()
リアルタイムでグラフの色をレインボーにする
実はカラー指定をしていないと,無限に切り替えられて線色がレインボーになります
是非下記コードで実際に試してみてください
xs = []
y1 = []
y2 = []
fig, ax = plt.subplots()
for x in np.linspace(0, 10, 100):
xs.append(x)
y1.append(4 + 2 * np.sin(2 * x))
y2.append(4 + 2 * np.cos(2 * x))
line1, = ax.plot(xs, y1, linestyle='-', label='Sample1')
line2, = ax.plot(xs, y2, linestyle='--', label='Sample2')
plt.pause(0.001)
line1.remove()
line2.remove()
参考文献
pause関数の公式ドキュメント
remove関数の公式ドキュメント
お疲れ様でした
コメント