S-JIS[2018-01-14/2018-01-15] 変更履歴

Python Matplotlib pyplot

Pythonの拡張モジュールMatplotlib(2.1.1)のpyplotのメモ。


概要

pyplotはグラフが描画できるグローバルなオブジェクト。

import matplotlib.pyplot as plt

pltに対してグラフの情報を登録して描画する。

座標軸のラベル等の設定方法は、どのグラフでも共通。
例えばplt.plot()を呼び出すと折れ線グラフ、plt.scatter()を呼び出すと散布図になる。
最後にplt.show()を呼び出すとグラフが表示される。

ipythonだとダイアログが出て、そこにグラフが描画される。
Jupyter Notebookだとブラウザー上(plt.show()を実行した行の下)にグラフが描画される。


pyplotの内部ではグラフ描画用のオブジェクトが使われている。
pltはグローバルなので、本当は描画用のオブジェクトを作ってコーディングする方が良さそうだが、とりあえず試すにはpltの描画メソッドを使うのが楽。


pyplotのグラフ描画用メソッド

pyplotで各グラフを描画する為の共通のメソッド。

説明
plt.title("title") グラフのタイトルを設定する。
plt.xlabel("xxx") X軸のラベルを設定する。
plt.ylabel("yyy") Y軸のラベルを設定する。
plt.xlim(0, 10) X軸の範囲を設定する。
設定しない場合、描画するグラフのデータから自動的に設定される。
plt.ylim(0, 10) Y軸の範囲を設定する。
plt.xscale("linear") 例えば"log"にするとX軸が対数目盛になる。
plt.yscale("linear") 例えば"log"にするとY軸が対数目盛になる。
plt.xticks(range(10)) X軸の目盛に表示する値を設定する。
文字列のリストも設定可。
引数なしで呼ぶと、現在の設定内容を取得する。
plt.yticks(range(10)) Y軸の目盛に表示する値を設定する。
x = 1
y = 1
plt.text(x, y, "abc")
文字列を表示する。[2018-01-15]
y = 5
x_min = 0
x_max = 10
plt.hlines(y, x_min, x_max, "blue", ":")
水平線を引く。
第4引数(引数名colors)は線の色。省略すると黒。
第5引数(引数名linestyles)は線の種類。省略すると実線。
x = 5
y_min = 0
y_max = 10
plt.vlines(x, y_min, y_max, "red", ":")
垂直線を引く。
plt.hlines(5, 0, 10, label="hhh")
plt.legend()
凡例を表示する。
描画する図形にlabelを付けておくと、それが凡例に出る。
plt.show() グラフを実際に描画する。
showが呼ばれるまでに設定されたグラフがまとめて表示される。
plt.savefig("example.png") グラフ(描画された画像)をファイルに保存する。

グラフの例

例えば散布図を描くにはscatterメソッド、折れ線グラフを書くにはplotメソッドを使用する。

これらのメソッドには複数の点の座標を渡すのだが、X座標の配列とY座標の配列を用意して両方を渡す形になっている。
(個人的には(X, Y)のタプルのリストで表す方が好みなのだが、配列(ベクトル)の方が計算が効率的らしい)

# (1, 2)(3, 4)(5, 6)という3つの点
xs = [1, 3, 5]
ys = [2, 4, 6]
plt.scatter(xs, ys)
plt.show()

座標にはNumPyndarrayを使うことも出来る。

import numpy as np

xs = np.array([1, 3, 5])
ys = np.array([2, 4, 6])
plt.scatter(xs, ys)
plt.show()

showメソッドを呼び出すまでに複数のグラフのメソッドを呼んでおくことが出来る。
そうすると、ひとつの表示領域の中に複数のグラフが表示されることになる。

plt.title("example")
plt.xlabel("xxx")
plt.ylabel("yyy")

x_max =  6
y_max = 10
plt.xlim(0, x_max)
plt.ylim(0, y_max)

# 水平線
plt.hlines(y_max / 2, 0, x_max, color="green", linestyle=":")

# 折れ線グラフ
line_xs = [1, 3, 4]
line_ys = [1, 4, 7]
plt.plot(line_xs, line_ys, color="blue", linestyle="--", marker="o", label="line")

# 散布図
point_xs = [2, 4, 5]
point_ys = [3, 5, 9]
plt.scatter(point_xs, point_ys, color="red", marker="*", label="point")

plt.legend() # 凡例を表示
plt.show()

↓実行結果


色(color)は色の名前、もしくは色によっては1文字で指定する。
また、RGBを十六進数表記(#FFC000)やタプルで各要素を0〜1で表す((1, 0.5, 0))ことも出来る。

plt.hlines(5, 0, 10, color="yellow")
plt.hlines(5, 0, 10, color="y")
plt.hlines(5, 0, 10, color="#FFFF00")
plt.hlines(5, 0, 10, color=(1, 1, 0))

色の名前はmatplatlib.colorsで確認できる。

import matplotlib
print(matplotlib.colors.cnames)

1文字で指定できる色は以下の通り。

1文字 対応する色名 (R, G, B)
b blue (0, 0, 1)
g green (0, 0.5, 0)
r red (1, 0, 0)
c cyan (0, 0.75, 0.75)
m magenta (0.75, 0, 0.75)
y yellow (0.75, 0.75, 0)
k black (0, 0, 0)
w white (1, 1, 1)

ただし、色の濃さに違いのある色がある。
例えば黄色はyだと#C0C000相当だがyellowは#FFFF00。


線の種類

線の種類(linestyle)はスタイル名もしくは記号で指定する。
あるいはタプルで形式を指定する事も出来る。

# linestyleの例
plt.hlines(5, 0, 10, linestyle="solid")
plt.hlines(5, 0, 10, linestyle="-.")
plt.hlines(5, 0, 10, linestyle=(0, (1, 1))) # dotted
スタイル名 記号 説明
solid - 実線
dashed -- 破線
dashdot -. 一点鎖線(破線の間に点が入った線)
dotted : 点線

マーカーの種類

マーカーは要するに「点」のこと。散布図の点とか折れ線グラフの頂点とかに使用する。

マーカー(marker)の種類は記号で指定する。

# マーカーの例
plt.scatter([5], [5], marker=".")
よく使いそうなマーカー
記号 説明 イメージ
o 小文字のO
. ピリオド
s 小文字のS 四角
* アスタリスク
^ ハット 上向き三角
v 小文字のV 下向き三角
< 不等号 左向き三角  
> 不等号 右向き三角  
+ プラス 十字
_ アンダースコア 横線
| 縦線 縦線

Matplotlibへ戻る / Pythonへ戻る / 技術メモへ戻る
メールの送信先:ひしだま