パンケーキ日記

ふらっと思ったことや備忘録などパンケーキに全く関係ないことをつぶやく

※ パンケーキの情報はありません

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()

実行結果は以下のような感じです。
f:id:halltan:20171018131655p:plain

windowsCPU使用率とかのグラフをパクりました。

でもあんなにちゃんとしてないのでただのパチもんです。

今回は温度センサのデータをモニタリングすることを想定したデザインにしています。

ですがセンサ信号のやりとりの部分は全くコードに書いていません。はい。

なので、てきとーに自分で温度を初期化してランダムな値を足したり引いたりしています。

そして時間間隔は超テキトーなのでちゃんとやりたい人は直して下さい。

恐らくもっとスマートな書き方があるとは思うのですがここらへんで満足しました。はい。



以下のブログを参考にさせていただきました。
qiita.com