田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【matplotlib.pyplot】subplotsを使ってグラフを描画する方法【Python】

f:id:vigilantPotato:20210517061311p:plain
pyplot.subplotsは複数のグラフを描画する際に使用し、自由にレイアウトを調整することができる。 公式サイトを参考に、基本的な使い方を整理した。


【スポンサーリンク】


pyplot.subplotsの基本

pyplot.subplotsはFigureオブジェクトとAxesオブジェクトを返す。各オブジェクトの役割は以下の通り。

  1. Figure:グラフを描画するキャンバス全体のオブジェクト
  2. Axes:Figureオブジェクト内の個々のグラフのオブジェクト
subplotsに値を何も渡さない場合は描画されるグラフは一つだけになるため、Axesオブジェクトも一つだけ生成される。 また、複数のグラフを描画する場合は、subplotsにグラフの数を渡すことで複数のAxesオブジェクトのリストを返す。以下に、4つのグラフを表示したときの例を示す。全体がFigreオブジェクトで、各グラフがAxesオブジェクトとなる。
f:id:vigilantPotato:20190707174432p:plain

[↑ 目次へ]


【スポンサーリンク】


グラフを表示

公式サイトと同じデータを、subplotsを用いて様々なパターンでグラフ化した。

使用データ

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)

グラフを一つだけ描画

fig, ax = plt.subplots()
ax.plot(x,y)
f:id:vigilantPotato:20190707174712p:plain

横に2つ並べて描画
subplotsのncolsオプションで横方向に表示させるグラフの数を設定する。 複数グラフを生成する場合はAxesオブジェクト自体ではなく、Axesオブジェクトのリストが返されるため、個々のAxesオブジェクトにはAxes[0]のような形で表示するグラフを設定する。

fig, ax = plt.subplots(ncols=2) #横に2つ並べる
ax[0].plot(x, y)                #プロット
ax[1].scatter(x, y)             #散布図
f:id:vigilantPotato:20190707174727p:plain

縦に2つ並べて描画
subplotsのnrowsオプションで縦方向に表示させるグラフの数を設定する。

fig, ax = plt.subplots(nrows=2) #縦に2つ並べる
ax[0].plot(x, y)
ax[1].scatter(x, y)
f:id:vigilantPotato:20190707174748p:plain]

縦横に4つのグラフを描画
nrowsとncolsの両方を設定すると、縦横両方向にグラフを並べることができる。 この場合、各Axesオブジェクトにアクセスするには、Axes[0,0]の様な形でグラフを設定する。

fig, ax = plt.subplots(nrows=2, ncols=2)
ax[0, 0].plot(x, y)
ax[0, 1].scatter(x, y)
ax[1, 0].bar(x,y)
ax[1, 1].fill(x,y)
f:id:vigilantPotato:20190707174801p:plain

nrowsとncolsは明示する必要はないため、以下の様に記述しても問題ない。 但し、必ずnrows→ncolsの順番にする必要がある。

fig, ax = plt.subplots(2, 2)

[↑ 目次へ]


【スポンサーリンク】