【技術記事】matplotlibで時系列の折れ線グラフを描こう

みなさん、こんにちは 。
みむすたーです。

この記事では、

センサーで読み取った温度や湿度などの時系列のデータを折れ線グラフで表したい!

というお悩みを解決します。

今回は、pythonの描画ライブラリであるmatplotlibを使って、
時系列の折れ線グラフを描いていきます。

既に取得済みの静的なデータの折れ線グラフと、
リアルタイムに変化する動的なデータの折れ線グラフの二つの描き方を説明します。

それでは、いきましょう。

もくじ

静的なデータの折れ線グラフ

今回は、年間の月別平均気温データを使用して、
静的なデータの折れ線グラフを描画させます。

サンプルプログラム

%matplotlib inline
import matplotlib.pyplot as plt

# 月
x = [1,2,3,4,5,6,7,8,9,10,11,12]

# 月ごとの平均気温データ
y = [6.5,7.8,10.6,14.6,21.0,23.7,26.5,29.1,26.6,20.7,14.2,9.5]

# 平均気温データ表示
fig = plt.figure()
subplot = fig.add_subplot(1,1,1)
subplot.plot(x,y)
plt.show()

サンプルプログラムの説明

x, yの配列で使用した年間の月別平均気温データは、以下のページから取得しました。

気象庁 – 観測開始からの毎月の値 –
http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=62&block_no=47772

plt.figure()は、
 白い無地のキャンバスを用意するという意味です。
fig.add_subplot(1,1,1)は、
 白い無地のキャンバスに1×1の描画領域を追加するという意味です。
subplotsubplot.plot(x,y)は、
 x,yのグラフを描画するという意味です。
plt.show()は、
 実際にグラフを表示するという意味です。

サンプルプログラムの動作

上のサンプルプログラムを実行した結果、
以下のようなグラフが表示されます。

動的なデータの折れ線グラフ

今回は、ランダムな値を使用して、
動的なデータの折れ線グラフを描画させます。

サンプルプログラム

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# 無地のキャンバスを作成する
fig = plt.figure()

# yの配列を作成する
y = []

def AnimationUpdater(frame):
  # 表示されているグラフをリセット
  plt.cla()

  # 100個以上のデータは削除する (FIFO)
  if len(y) >= 100:
    # 配列の先頭を削除
    del y[0]

  # ランダムに値を一つ生成する
  rnd = np.random.randn(1)
  y.append(rnd)

  # yのグラフを表示
  plt.plot(y)

# アニメーション作成
ani = animation.FuncAnimation(fig,AnimationUpdater, interval=50)
plt.show()

サンプルプログラムの説明

y = []は、
 空の配列データを作成します。
def AnimationUpdater():は、
 アニメーションの1フレームごとに呼ばれる関数です。
 関数内の内容は、基本的にはコメント文に書いた通りです。
 yのデータの数が100個以上になれば、古い順のデータから削除していきます。
animationFunAnimation(fig,AnimationUpdater, interval=50)は、
 50ms間隔で、AnimationUpdaterを呼ぶように設定しています。
plt.show()は、
 グラフを描画することを意味します。

サンプルプログラムの動作

コメント