【Matplotlib】グラフをリアルタイム表示する (pause, remove)

実験での数値モニターや機械学習や深層学習の数値データがどのように改善されているかなど,リアルタイムでデータを可視化したいことはよくあります

本記事では,pythonのMatplotlibでグラフをリアルタイムで表示する方法を解説します

pause関数とremove関数を用いて実装します

簡単に実装する方法だけでなく,凡例をいれたり,グラフの色をレインボーにする方法も紹介します

目次

簡単にグラフをリアルタイムで表示する (pause)

Matplotlibでグラフをリアルタイムで表示するには,pyplot.pauseという関数を使います

pause関数の使い方
pause(数値)

括弧の中に数値を指定すると,その秒数だけ停止します

plt.pause(0.001)

こちらは,xy1y2のリストに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関数でグラフを削除します

配列ごと新規の数値に更新していく場合も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関数の公式ドキュメント

お疲れ様でした

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次