センサの出力値を上手に保存する #2
前回記事をご覧になっていない方は前回記事もご覧ください。
1.はじめに
#1ではUI表示を行わず、gifを作成するのみだった。それは表示する環境がなかったからである。環境作った。表示する。
2.UbuntuにGUIを
XLaunchを用いた。次の記事を参考にした。
XLaunchを起動する際に、DISPLAY NUMBERを指定すれば更にスムーズに進む。これでmatplotlibのプロットをウィンドウで表示できる。
3.プログラム終了
前回、プログラムの終了時にgifを作成するプログラムを書いた。しかし、無限ループにした際に、Ctrl+Cでしか終了できず、強制終了になるためgifは作成できなかった。そのためKeyboardというライブラリを用いて、キーボードから終了命令を送ることを考えたが、できなかったのでやめた。
結局、Pythonのtry文を使い、KeyboardInterrupt例外処理の中でgifを作成することでCtrl+Cで終了した際にgif作成を行うようになった。
4.プログラムと実行結果
import math
from pickletools import optimize
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
pi = float(3.14159265358979)
s_t = float(0.2) #サンプリング時間
i = int(0)
t = []
result = []
imgs = []
fig, ax = plt.subplots(1,1)
ax.set_xlim(0,2)
ax.set_ylim(-1,1)
while True:
try:
t.append(i*0.2)
result.append(np.random.uniform(-1,1))
ax.plot(t,result)
fig.savefig("data/test"+str(i)+".png")
img = Image.open("data/test"+str(i)+".png")
imgs.append(img)
if i>=5:
ax.set_xlim(i*0.2-1,i*0.2+1)
i=i+1
plt.pause(0.2)
except KeyboardInterrupt:
imgs[0].save("animation.gif", save_all=True, append_images=imgs[1:], optimize=False, duration=100, loop=0)
break
except:
pass
図1 プログラム
無限に続く時系列データをX軸が追従するように変更してある
図2 実行画面
図3 保存したgif
以上
この記事が気に入ったらサポートをしてみませんか?