クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

実験結果をmatplotlibで(ゆっくり)リアルタイム更新しよう

実験の途中結果を表示します

こまんたれぶー。かえるのクーの助手の「井戸中 聖」です。

グラフの枠はできたので、グラフをゆっくり順次更新していきます。

f:id:AssistantOfKoo:20200704212151j:plain

音声のリアルタイム波形表示なら、断然pyqtgraphのほうがいいですが、そこまで高速でなくてよい場合はmatplotlibのほうがなにかと扱いやすそうです。

(ほぼ)リアルタイムでグラフを順次更新していく方法を確認します。

グラフ枠は前回作成したax2の場所を使います。

f:id:AssistantOfKoo:20200704152045p:plain

プロットの枠を起動したあと、グラフの基本設定を行い、前の情報を消さずに書いていきます。

グラフ随時出力のサンプル

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from time import sleep

def realtime_plot_init(ax):
ax.set_title("Graph") # グラフタイトル
ax.set_xlabel("x") # x軸ラベル
ax.set_ylabel("y") # y軸ラベル
ax.grid() # グリッド表示
ax.set_xlim([0, 10]) # x軸範囲
ax.set_ylim([0, 10]) # y軸範囲

def realtime_plot(x, y, ax):
if x == 0:
line, = ax.plot(x, y, "ro", label="y=x") # (x,y)のプロット ラベルあり
else:
line, = ax.plot(x, y, "ro") # (x,y)のプロット ラベルなし
ax.legend() # 凡例表示
plt.draw() # グラフの描画(なくても描画するが、気分的にいれる)
plt.pause(0.1) # 更新時間まち

if __name__ == '__main__':
fig = plt.figure(figsize=(5, 9)) #横、縦のインチ指定です
gs = gridspec.GridSpec(17, 9) #18, 10のグリッドに分割します。
ax2 = plt.subplot(gs[10:15, 0:5]) #3インチ横3インチ

realtime_plot_init(ax2) #グラフの軸や範囲の設定

for i in range(11):
realtime_plot(i, i, ax2) #順次プロット
sleep(1)

sleep(10)

実行するとこんな風になります。

f:id:AssistantOfKoo:20200704210625g:plain

単純なプロットグラフでない場合は、その都度全部かきなおしたい場合があります。
そのときはax.cla()をします。
ラベルやタイトル情報も全部クリアされます。

簡単なグラフならいいですが、複雑なグラフは実験プログラムに組み込むと、実験スピードが低下します。

そこで、次はグラフをマルチプロセスで書く方法を確認します。

(つづく)

今日の格言

「井の中の蛙、大海を知らず。されど宇宙を識る。」
このブログのモチーフみたいですが、残念ながら格言だけで、かえるのクーは宇宙物理に疎いんです。。。