Matplotlibの基本のキ

2021年3月29日

私は当初「Matplotlibって何?」って思っていたので、自分への戒めを含めてMatplotlibの基本を書き記しておきます。

matplotlib グラフ描画のツール

matplotlibはグラフなどの図形描画を行うためのツールです。numpyやscipyで行った計算結果を可視化する為につかわれます。

matplotlib.pyplotはグラフ描画に必須

matplotlibのモジュール群です。図形描画の際にpyplotを使います。
グラフを描画する前にはmatplotlib.pyplot を読み込んでおきましょう。

import matplotlib.pyplot as plt

matplotlibの予備知識

まずはmatplotlibでよく使う二つのインターフェイスを紹介します。

MATLAB型インターフェイス

pyplotを使う為のMATLABのようなインターフェイスです。グラフを簡易的に描くツールです。

ここでは試しにpyplotに含まれる関数plotを使って折れ線グラフを書いてみましょう。

【例】
import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(0,5)
y = np.array([10, 20, 30, 20, 40])
plt.plot(x, y)
【実行結果】

オブジェクト指向型インターフェイス

もう一つのインターフェイスはオブジェクト指向型のインターフェイスです。Artistの派生クラスになっていてグラフを細かくデザインしたい時はこちらが便利です。基本的にはこちらを使いましょう。

figure

オブジェクト指向インターフェイスで構成された図形描画のためのArtistの派生クラス。色んな部品が含まれています。グラフ作成時にインスタンス化して使います。

axes

オブジェクト指向インターフェイスでfigureの下位に属します。figureでインスタンス化された図形の中に更に図形を描画するためのArtistの派生クラスです。


ここでは上記の例で描いた折れ線グラフと同じグラフをfigureを使って書いてみましょう。

【例】
import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(0,5)
y = np.array([10, 20, 30, 20, 40])
 
fig, ax = plt.subplots()
ax.plot(x,y)
plt.show()
【実行結果】

それぞれのインターフェイスから呼び出す関数

関数を呼び出す際、上記の例ではMATLAB型インターフェイスの場合

plt.plot(x, y)

オブジェクト指向型のインターフェイスの場合

ax.plot(x,y)

となります。つまりそれぞれのインターフェイスで呼び出す関数はpltとaxをを置き換えれば呼び出すことが出来ます。


matplotlibでグラフを描こう

matplotlibでグラフを描画するには通常オブジェクト指向インターフェイスをインスタンス化してからグラフの描画を行います。その為の関数をご紹介します。

figure グラフ描画のインスタンス化の関数

グラフ描画の際にはまずfigureのインスタンス化を行います。figureにはaxesが必要なのでaxesを追加する作業を行います。
figureとaxesの関係は例えるならfigureが紙でaxesがグラフを描く作業となります。

書き方

figure( figsize, dpi )

figsize(オプション) 図の大きさを( 幅, 高さ )で指定。
dpi(オプション) 図の解像度をdots-per-inch(1インチ辺りのドット)で指定。

または

書き方

subplots()

実際にfigureにaxesを追加する為にはadd_subplotかadd_axesを使います。

add_subplot figureの中にaxesを追加

add_subplotを使ってグラフ描画に必要なaxesを取得します。

subplotはadd_subplotのラッパー。

書き方

add_subplot( 行, 列, 表示する場所 )

【例】
add_subplot( 2, 3, それぞれの番号 )
2行3列の場合、表示する場所は下記の番号に対応します。
【例】
import matplotlib.pyplot as plt
 
fig = plt.figure()
# グラフの外枠を描画
ax = fig.add_subplot(1,1,1)
# グラフの中にグラフを描画
fig.add_subplot(2,3,6)
 
plt.show()
【実行結果】

add_axes figureの中にaxesを追加

書き方

add_axes( x軸原点, y軸原点, 幅(大きさの比率), 高さ(大きさの比率) )

【例】
import matplotlib.pyplot as plt
 
fig = plt.figure()
# グラフの外枠を描画
ax = fig.add_axes([0, 0, 0.8, 0.8])
# グラフの中にグラフを描画
fig.add_axes([0.1,0.1, 0.3,0.3])
 
plt.show()
【実行結果】

それではfigureとaxesを使って上記と同じ折れ線グラフを描いてみましょう。

【例】
import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(0,5)
y = np.array([10, 20, 30, 20, 40])
 
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y)
plt.show()
【実行結果】

add_subplotとadd_axesの違い

add_subplotはグラフ内を分割した指定位置に配置するのに対し、add_axesは絶対座標により細かく指定位置を決めることができます。

普段使うにはadd_subplotが一般的だと思います。


subplots figureとaxesを同時にインスタンス化する関数

書き方

subplots( 行数, 列数, figsize( 行の大きさ, 列の大きさ ) )

※figsizeは下図の赤枠に相当。グラフ全体の大きさを変える時はfigsizeを調整。

【例】
subplots( 2, 3, figsize(6,4) )
2行3列の場合、表示する場所は下記の番号に対応します。
【例】
import numpy as np
import matplotlib.pyplot as plt
 
x = np.linspace(-5, 5, 20)
y1 = x
y2 = x ** 2
y3 = x ** 3
y4 = x ** 4
y5 = x ** 5
y6 = x ** 6
 
fig, ax = plt.subplots(2, 3, figsize=(6, 4))
 
ax[0, 0].plot(x, y1)
ax[0, 1].plot(x, y2)
ax[0, 2].plot(x, y3)
ax[1, 0].plot(x, y4)
ax[1, 1].plot(x, y5)
ax[1, 2].plot(x, y6)
 
plt.show()
【実行結果】

Matplotlib

Posted by Bright_Noah