【Python】matplotlibで1枚の画像に複数のグラフを描画する方法② -plt.subplots()

前回はplt.figure()で描画領域全体を生成した後、add_subplots()でプロットごとにそれぞれの領域を割り当てて複数プロットを描画する方法を紹介しました。

今回も目的は同じで、1つの描画領域内に複数プロット(グラフ)を表示させることです。ただし、今回は前回と少し違う方法でプロットしていきます。

今回はplt.subplots()を用います。この方法の特徴は、最初に必要なプロット数に応じて描画領域を分割しておくという点です。詳しくは以下で実際のコードを交えて紹介していきます。

FigureとAxisをまとめて作る

plt.subplots()

前回紹介したadd_subplots()の方法では、Figureを作成した後にAxisを必要な分作成していました。

今回の方法ではplt.subplots()を使ってFigureとAxisをまとめて作成します。試しに3×3のプロット領域を作成します。

from matplotlib import pyplot as plt

fig, axes = plt.subplots(3, 3, tight_layout=True)

plt.show()

このように、中身のないプロット領域が予め作成されます。あとはプロットしたい場所を指定して、任意のデータでグラフを描画していきます。

プロット領域の指定についてですが、左上が[0, 0]、右下が[2, 2]となるように指定します。

プロット領域の指定方法

プロットを描画していく

この座標を元に、任意の位置にグラフを描画していきます。座標の指定はaxisに対して行います。サンプルコードを見てみます。

import numpy as np
from matplotlib import pyplot as plt

fig, axes = plt.subplots(3, 3, tight_layout=True)
 
axes[0,0].scatter(x, y1)
axes[1,1].scatter(x, y2)
axes[2,1].bar(x, y3)

plt.show()
指定した座標にプロットされる

このように、指定した座標に対してプロットされます。特に描画を指定していない領域は空のままです。

plt.subplots()を使えば、描画領域をどれだけ分割するのかが一目瞭然なため、コード的には管理しやすいです。add_subplot()では好きなだけ追加していく感じだったので、無法地帯になりかねません(そこまでやるケースはないと思いますが、、)

補足説明ですが、tight_layout=Trueとすると、自動でプロットのレイアウトを調整してくれるので便利です。

まとめ

plt.subplots()を使って複数グラフを並べて表示する方法を紹介しました。どちらも同じことができるので、add_subplots()かplt.subplots()好きな方を使ってください。

1つ1つのプロットのサイズを変えたい場合はadd_subplots()、分割数を決めてきちんと作図する場合はplt.subplots()がいいんですかね?

ではでは👋