matplotlibで何かしらのデータをモニタリングする
タイトル通りmatplotlibで何かしらのデータをモニタリングするためのプログラムをpythonで書きました。
# -*- coding: utf-8 -*- from __future__ import unicode_literals, print_function from numpy.random import * import numpy as np import matplotlib.pyplot as plt import time def pause_plot(): # グラフの初期化 fig, ax = plt.subplots(1, 1) # 初期化 time_range = 61 # time_range-1 = x軸の範囲 x_list = range(time_range) # [0,1,2,...,time_rage-1] x_list.reverse() # listの中身をを逆順に並び替え x_array = np.array(x_list) # list -> array 変換 y_list = [20]*time_range # 20をtime_range個もつ配列 y_array = [] # 配列初期化 lines, = ax.plot(x_list, y_list) # 初期プロットのオブジェクト受け取り lines.set_color('c') # グラフ線の色 lines.set_linewidth(2) # グラフ線の幅 ax.grid(color = 'gray', linestyle = '-') # gridを表示 text = plt.text(54.5, 42.5, str(20.0)+" ℃", color='c',fontsize=40) # 温度テキスト初期化 ax.set_axis_bgcolor('0.15') # 背景の色 # x, y軸の範囲を設定 ax.set_xlim((time_range-1, 0)) ax.set_ylim(0, 50) # x, y軸のラベル設定 plt.xlabel('seconds before [s]') plt.ylabel('templeture [℃]') while True: text.remove() # 前回の温度を削除 y_array_before = np.array(y_list) # 前回の温度配列を保存 y_list.pop(0) # 61秒前のデータを削除 add_data = y_list[-1]+randn() # 新しい温度データを生成 y_list.append(add_data) # 新しい温度データを追加 y_array = np.array(y_list) # list->array 変換 print(y_array[-1]) # 現在の温度表示 # 1秒前の温度データ領域をグラフから消す ax.fill_between(x_array, y_array_before, facecolor='0.15', edgecolor='0.15') # 現在の温度データ曲線を表示 lines.set_data(x_array, y_array) # 現在の温度データ領域を塗りつぶす ax.fill_between(x_array, y_array, facecolor='c', alpha=0.2, edgecolor='c') # 現在の温度を表示 text = plt.text(54.5, 42.5, str(round(add_data, 1))+" ℃", color='c',fontsize=40) # pauseの引数分の時間を開ける [sec] # だいたい1秒くらいになるように調整する(正確にやるやり方はまた今度がんばろう...) plt.pause(0.85) if __name__ == "__main__": pause_plot()
実行結果は以下のような感じです。
でもあんなにちゃんとしてないのでただのパチもんです。
今回は温度センサのデータをモニタリングすることを想定したデザインにしています。
ですがセンサ信号のやりとりの部分は全くコードに書いていません。はい。
なので、てきとーに自分で温度を初期化してランダムな値を足したり引いたりしています。
そして時間間隔は超テキトーなのでちゃんとやりたい人は直して下さい。
恐らくもっとスマートな書き方があるとは思うのですがここらへんで満足しました。はい。
以下のブログを参考にさせていただきました。
qiita.com