gnuplotしか使ってこなかった自分がmatplotlibを使い始めたので覚書。
必要最低限の使い方をまとめる。
import numpy as np
import matplotlib.pyplot as plt
必要なモジュールのインポートが上のように行なわれているとして話を進める。
データ点をプロットする
x = [1,2,3,4]
y = [5,6,7,8]
plt.plot(x, y, 'o-', label="my data") # plot ... w lp title "my data"
plt.xlabel("X") # set xlabel "X"
plt.ylabel("Y") # set ylabel "Y"
plt.legend(loc='best') # set key
plt.show()
コメントに記載されているのは対応するgnuplotコマンド。
plot()
の第3引数は、データの表示フォーマット。'o'が丸いマーカーを表し、'-'が線のタイプを表している。
plt.legend
の引数としてloc='best'
を指定しておくと凡例の場所をよしなに選んでくれる。デフォルトでbestを選んでおけば良さそう。
複数のシリーズのプロット
x = [1,2,3,4]
y1 = [5,6,7,8]
y2 = [4,2,8,6]
plt.plot(x, y1, 'o-', label='y1') # plot ....
plt.plot(x, y2, 'o-', label='y2') # replot ...
plt.legend(loc='best') # set key
plt.show()
plot
を複数回呼ぶとどんどんプロットが重ねられていく。show()
を呼ぶ時に初めて描画される。
関数をプロットする
関数を与えてそのままプロットすることはできないので、データ点を自分で作る必要がある。
np.arange
を使うのがイディオム。
x = np.arange(-3.0, 3.0, 0.01)
y = np.sin(x) * np.exp( -x)
plt.plot(x, y, '-')
plt.show()
ログスケールにする
x = np.arange( -3.0, 3.0, 0.01 )
y = np.exp(-x) * np.cos(x)*np.cos(x)
plt.plot(x, y, '-')
plt.yscale('log')
plt.show()
linear scaleにしたい場合は例えば plt.xscale('linear')
というように書く。
ファイルからデータを読む
例えば以下のようなファイルがあるとして
1 2 4
3 4 9
5 6 2
7 8 4
これをプロットするには
# "cols", "names", "delimiter" arguments are mandatory.
plt.plotfile('test.dat', cols=(0,1), names=('x','y'), delimiter=' ', marker='o', linestyle='--')
plt.show()
とする。delimeter
, names
, cols
を省略すると上手くいかない。
特にnames
が無いと、最初の1行がヘッダ行だと解釈されてしまうので1行分のデータがなくなってしまう。
またはnumpyを使ってデータを読む
np.loadtxt("test.dat", comments='#', delimiter=' ')
plt.plot( dat[:,0]/1000, dat[:,1], 'o-' )
複数列の結果のプロット
names = ('x','y1','y2')
plt.plotfile('test.dat', cols=(0,1), names=names, delimiter=' ', label="y1")
plt.plotfile('test.dat', cols=(0,2), names=names, delimiter=' ', label="y2", newfig=False)
plt.legend(loc='best')
plt.show()
または同様にnumpy#loadtxt
を使う
ファイルに書き出す
plt.figure() # bufferのクリア
x = [1,2,3,4]
y = [5,6,7,8]
plt.plot(x, y, 'o-', label="my data")
plt.xlabel("X")
plt.ylabel("Y")
plt.legend(loc='best')
plt.savefig('plot.png')
savefig( filename )
メソッドを使う。ファイル名の拡張子に応じて適切にフォーマットを切り替えてくれる。便利!
EPSやPDFも書き出せる。