Pythonを使ってデータ比較&グラフに日本語を表示
準備
IPAフォントを使うので、ダウンロード
http://ipafont.ipa.go.jp/index.html
比較するデータを2つ準備
今回は、気象庁から12月1日と2日の練馬区の気温データを取ってくる http://www.data.jma.go.jp/obd/stats/etrn/view/hourly_a1.php?prec_no=44&block_no=1002&year=2013&month=12&day=1&view=p1 http://www.data.jma.go.jp/obd/stats/etrn/view/hourly_a1.php?prec_no=44&block_no=1002&year=2013&month=12&day=02&view=p1
これを今回は手作業で
1 0.0 3.7 0.0 2 0.0 3.0 0.0 3 0.0 3.1 0.8 4 0.0 2.2 0.0 5 0.0 2.1 0.3 6 0.0 1.4 0.3 7 0.0 1.7 0.4 8 0.0 4.4 1.2 9 0.0 7.9 0.8 10 0.0 9.5 1.9 11 0.0 10.6 1.7 12 0.0 11.8 0.3 13 0.0 13.3 0.9 14 0.0 14.0 0.7 15 0.0 14.1 0.6 16 0.0 12.2 0.1 17 0.0 10.4 0.5 18 0.0 9.0 0.1 19 0.0 8.4 0.0 20 0.0 8.0 0.3 21 0.0 7.4 0.0 22 0.0 7.4 0.6 23 0.0 6.6 1.3 24 0.0 5.9 0.3
こんなかんじと
1 0.0 5.5 1.3 2 0.0 5.5 0.8 3 0.0 4.7 0.9 4 0.0 3.3 0.1 5 0.0 3.1 0.0 6 0.0 2.6 0.3 7 0.0 3.0 0.8 8 0.0 5.3 0.9 9 0.0 7.8 0.1 10 0.0 10.0 0.4 11 0.0 12.0 1.1 12 0.0 13.0 1.4 13 0.0 14.0 1.4 14 0.0 14.3 0.9 15 0.0 14.4 1.0 16 0.0 13.3 0.6 17 0.0 10.1 0.0 18 0.0 9.6 0.0 19 0.0 8.6 0.5 20 0.0 8.8 1.0 21 0.0 8.9 1.8 22 0.0 8.3 1.4 23 0.0 7.7 1.1 24 0.0 7.1 0.7
これでデータ準備完了
それではグラフを作ってみよう
スクリプト作成
#!/usr/bin/env python # vim: set fileencoding=utf-8 : # # Author: shinofara # Date: 2013-12-03 # import numpy as np import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as pl import matplotlib.font_manager as fm # 日本語フォント prop = fm.FontProperties(fname='/home/yshinoha/src/ipaexg.ttf') # 各データを読み込みデーター名と共に配列化 dataset = [ ("2013/12/01", np.loadtxt("1201.csv")), ("2013/12/02", np.loadtxt("1202.csv")), ] # 各データのY値をCondition1からの相対値に変更する ymin = np.min(dataset[0][1][:,0]) ymax = np.max(dataset[0][1][:,0]) ydif = ymax - ymin #for label, data in dataset: # data[:,0] = data[:,0] / ydif * 10 # 各データをプロット for label, data in dataset: # X, Yデータを描画(step1のようにX, # Yに分けても良いが、わけなくても問題ない) pl.plot(data[:,0], data[:,2], label=label) # グラフのスーパータイトルを指定(オプション) # 複数グラフを表示した際などに総括タイトルとして使用することが多い pl.suptitle(u"東京都練馬区の気温", fontproperties=prop) # グラフのタイトルを指定(オプション) pl.title(u"2013/12/01と02 練馬区 - 1日の気温", fontproperties=prop) # X軸, Y軸のラベルを設定(オプション) # 必要であればLaTeX的な指定も$で囲むことで可能。 # 例えば文字中に$\AA$とするとオングストロームの記号を表示可能。 pl.xlabel(u"時間", fontproperties=prop) pl.ylabel(u"気温", fontproperties=prop) # X軸, Y軸の範囲を指定(オプション) # 他のグラフと合わせる場合などに便利だが指定しない場合は自動的に見やすい # 範囲となるため理由がない限り指定しないほうが多い #pl.xlim(450, 650) #pl.ylim(0, 100) # グラフにグリッドを表示(オプション) pl.grid() # 複数のプロットがあるため凡例を表示 pl.legend() # グラフを表示 or 保存 #pl.show() # 表示 pl.savefig("step2.png") # 保存(svg, epsなどにも対応
少しだけ説明を加えると
# font managerを使えるようにする import matplotlib.font_manager as fm # 日本語フォントを設定 prop = fm.FontProperties(fname='./ipaexg.ttf') # 日本語を設定 pl.suptitle(u"東京都練馬区の気温", fontproperties=prop)
作成処理実行
$ python test02.py
結果はこんな感じ