====== 概要 ======
研究でmatplotlibを使う場合、実験データや数値計算データなどの外部のファイルに保存されたデータを読み込んでプロットすることが多いと思います。
その方法について簡単な例を元に紹介します。
====== 方法 ======
===== データの読み込み =====
例として2017年の京都の月別平均気温のプロットをしてみましょう。
左から月、平均気温、最高気温、最低気温です。
#month mean high low
1 4.8 13.7 -2.7
2 5.1 15.2 -0.7
3 8.2 20.8 0.1
4 14.8 27.5 3.3
5 20.9 32.2 9.5
6 22.5 34.0 12.8
7 28.4 36.1 21.2
8 28.7 36.7 21.9
9 23.7 32.5 14.7
10 18.0 30.5 7.3
11 11.2 22.7 2.8
12 5.6 14.9 -0.8
(http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s1.php?prec_no=61&block_no=47759&year=2017&month=1&day=&view= より作成)
===== プロット =====
NumPyのgenfromtxtを使ってファイルからデータを読み込みます。
data[:,n]にn+1列目のデータが入ります。
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt("kyoto.dat")
plt.plot(data[:,0], data[:,1], label="Daily mean")
plt.plot(data[:,0], data[:,2], label="Record high")
plt.plot(data[:,0], data[:,3], label="Record low")
plt.title("Kyoto, 2017")
plt.xlabel("Month")
plt.ylabel("Temperature")
plt.legend()
plt.savefig("kyoto.png")
{{:python:matplotlib:kyoto.png?direct&400|}}
===== コメント行と区切り文字の変更 =====
デフォルトでは行頭が#だとコメント行だと判断され、スペースをデータの区切りとして扱います。
これを変更することも出来ます。
例えば次のようにデータが用意されているとします。
!month mean high low
1, 4.8, 13.7, -2.7
2, 5.1, 15.2, -0.7
3, 8.2, 20.8, 0.1
4, 14.8, 27.5, 3.3
5, 20.9, 32.2, 9.5
6, 22.5, 34.0, 12.8
7, 28.4, 36.1, 21.2
8, 28.7, 36.7, 21.9
9, 23.7, 32.5, 14.7
10, 18.0, 30.5, 7.3
11, 11.2, 22.7, 2.8
12, 5.6, 14.9, -0.8
コメント行の行頭の文字はcommentで、データの区切り文字はdelimiterで指定します。
data = np.genfromtxt("kyoto.dat", comment="!", delimiter=',')