« | »

2013.12.29

matplotlib

Pythonのmatplotlib覚え書き
2013/12/29 更新 / 2013/8/6 更新 / 2013/4/5 更新 / 2013/2/17 更新 / 2013/1/12 リリース


csvファイルから折れ線グラフを描く場合の基本的なプログラム

# python linegraph.py data.csv

とデータファイルを引数に渡す。
data.csvは下のような内容が数千行
2012-10-08 16:20:50,74.3,48.1
2012-10-08 16:30:50,74.6,47.7
2012-10-08 16:40:50,74.4,47.6
2012-10-08 16:50:50,74.4,47.7
2012-10-08 17:00:50,74.3,47.6
2012-10-08 17:10:50,74.1,47.5
2012-10-08 17:20:50,73.3,47.6
2012-10-08 17:30:50,73.5,47.5
2012-10-08 17:40:50,74.8,47.6
2012-10-08 17:50:50,74.4,47.5
linegraph.py

import matplotlib.pyplot as plt
import sys, csv, datetime
date, ch1, ch2 = [], [], [] # 配列変数を定義
f = csv.reader(open(sys.argv[1])) # 引数にファイル名を指定してファイルを開く
for line in f: #各列のデータを取得。1列目は日付型として取得
 date.append(datetime.datetime.strptime(line[0], '%Y-%m-%d %H:%M:%S'))
 ch1.append(float(line[1]))
 ch2.append(float(line[2]))
fig = plt.figure(figsize=(16,9)) #グラフのサイズを1600*900pixelに指定
fig.autofmt_xdate() # 日付型の目盛を作るのに必要らしい
plt.subplot(111) # subplot(LMN)で、Lが縦の区画数、Mが横の区画数、Nが対象の区画
plt.plot(date,ch1, '-', linewidth=1) # dateとch1に関するグラフをプロット
plt.plot(date,ch2, '-', linewidth=1) # -はプロットを線でつなぐ形式。マーカー無し
plt.legend(('Ch1','Ch2'), loc='center left', fontsize='10') #凡例の内容と表示位置、文字サイズ(plotした後でないと表示されない)
plt.show()
plt.savefig(sys.argv[1]+'.png') #データファイル名+.pngを出力

その他(import matplotlib.pyplot as plt)

縦軸の目盛の範囲を0〜120に指定する

plt.ylim([0,120])

縦軸の目盛を0.1刻みで-5〜30に指定する

import numpy
plt.yticks(numpy.arange(-5,30,0.1))

y=1の赤い平行線を引く

plt.axhline(y=1, color='red')

グラフのプロットや目盛の設定をクリアする

plt.clf()

グラフや軸にタイトルを付ける

plt.title("グラフのタイトル")
plt.xlabel("x軸のタイトル")
plt.ylabel("y軸のタイトル")

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title("グラフのタイトル")
ax.set_xlabel("x軸のタイトル")
ax.set_ylabel("y軸のタイトル")

左右でメモリ軸が異なる複合グラフを描画する, second yaxis, right axis

plt.plot(左のメモリでのプロット)
plt.twinx()
plt.plot(右のメモリでのプロット)

legendやylabalも別々に付けられる。

目盛(tick)を消す
x軸なら

plt.tick_params(labelbottom='off')

y軸左なら

plt.tick_params(labelleft='off')

y軸を対数表示にする。

plt.subplot(111).set_yscale('log')