時系列データのプロット
[3-7]の乱数値、[4-9]の乱数値を生成して、30分刻みの時系列データとしてプロット
#!/usr/bin/env python import random import dateutil.parser as parser import matplotlib.pyplot as plt import matplotlib.dates as mdates def plot(): x = ["00:00", "00:30", "01:00", "01:30", "02:00", "02:30", "03:00", "03:30", "04:00", "04:30", "05:00", "05:30", "06:00", "06:30", "07:00", "07:30", "08:00", "08:30", "09:00", "09:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", "23:00", "23:30"] xval = [parser.parse(xv) for xv in x] yval1 = [random.randint(3,7) for i in range(48)] yval2 = [random.randint(4,9) for i in range(48)] fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot(xval,yval1,marker='o',linestyle="-",label="y1") ax.plot(xval,yval2,marker='x',linestyle="--",label="y2") ax.set_ylim(0,10) ax.set_xlabel("Time") ax.set_ylabel("Y Value") ax.legend(loc="upper right") ax.grid() days = mdates.AutoDateLocator() daysFmt = mdates.DateFormatter("%H:%M") ax.xaxis.set_major_locator(days) ax.xaxis.set_major_formatter(daysFmt) plt.savefig("test.png") plt.close() if __name__=="__main__": plot()
plot()の仕様(一部):
plot(x, y, marker='o', linestyle="-", label="xxx")
- x: x要素のデータ(datetime型)
- y: y要素のデータ
- linestyle: 点同士をどのような線で結ぶか
- legend: 凡例名
※より詳しくは、http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.plot を参照
Locator について: 時系列データの目盛の間隔を設定する
- set_major_locator() の引数として、以下のいずれかのインスタンスを代入する
- matplotlib.mdates.AutoDateLocator(): 自動的に間隔を決定
- matplotlib.mdates.MonthLocator(): 月間隔
- matplotlib.mdates.DayLocator(): 日間隔
- matplotlib.mdates.HourLocator(): 時間隔
- matplotlib.mdates.MinuteLocator(): 分間隔
- etc.
※上記のサンプルコードで、AutoDateLocator() でなく、 HourLocator() を設定すると、目盛間隔が1時間ごとになる。
※より詳しくは、http://matplotlib.org/api/dates_api.html#date-tickers を参照
Formatter について: 日付のラベルの表示形式を設定する
- set_major_formatter() の引数に、以下のいずれかのインスタンスを代入する
- matplotlib.mdates.AutoDateFormatter(): 自動的に表示形式を設定
- matplotlib.mdates.DateFormatter(): 引数にstrを代入して、表示形式を指定
- matplotlib.mdates.DateFormatter("%H:%M"): 表示形式は "時:分" となる
- matplotlib.mdates.DateFormatter("%m/%d %H:%M"): 表示形式は "月/日 時:分" となる
- etc.
※より詳しくは、 http://matplotlib.org/api/dates_api.html#date-formatters を参照