14
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

matplotlib入門

Last updated at Posted at 2017-01-27

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()

image

コメントに記載されているのは対応する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()

image

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()

image

ログスケールにする

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()

image

linear scaleにしたい場合は例えば plt.xscale('linear') というように書く。

ファイルからデータを読む

例えば以下のようなファイルがあるとして

test.dat
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行分のデータがなくなってしまう。

image

または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()

image

または同様に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')

image

savefig( filename ) メソッドを使う。ファイル名の拡張子に応じて適切にフォーマットを切り替えてくれる。便利!
EPSやPDFも書き出せる。

14
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?