【Python】Matplotlibで複数のグラフを並べよう!

こんにちは!

皆さんはMatplotlibで作成したグラフを並べたいと思ったことはありませんか?

Python初心者
2つのグラフを比較したいときは並べるね!

複数のグラフを個別に作成して、パワーポイント等で使用する際に横に並べるといった方法を使う方もいるかと思います。

しかしそのような場合には、画像の管理が大変だったり、グラフの大きさが少し違ってイライラしてしまうことがあるかもしれません。

そこで今回は、Matplotlibを使用して複数のグラフを1つの画像に並べて出力する以下の4つの方法を紹介します。

  • 横にグラフを並べる方法
  • 縦にグラフを並べる方法
  • 上に2つ下に2つのように複数のグラフを並べる方法
  • 軸の値を合わせる、共有する方法

棒グラフを用いてグラフを並べる方法を紹介していくので、棒グラフの描き方がわからない方は以下の記事をご覧ください。

あわせて読みたい

こんにちは! 前回の記事では、簡単なグラフの描き方として、折れ線グラフ、曲線のグラフの描き方を紹介しました。 [sitecard subtitle=あわせて読みたい url=https://py-memo.com/python/[…]

棒グラフ
本ブログではPython以外にも、
投資、就活、英語についての記事を書いています。
気になる方は是非見てみてください!

複数のグラフを並べて出力する方法

複数のグラフを並べて出力するには、まず初めに、「plt.figure()」で図のインスタンスを作成します。

その図のインスタンスに複数のグラフを出力します。

図のインスタンスに複数のグラフを出力するには、「add_subplot()」を使用します。

初心者の方はあまり意識しなくても良いのですが、この考え方はオブジェクト指向によるものみたいです。
figure()で作成したインスタンスの上にadd_subplot()で作成したグラフを乗せる感じです。

add_subplot()の書式は以下のようになります。

add_subplot(行数, 列数, 番号)

行数と列数でfig全体を何分割するかを指定します。
番号で分割したfigのどこにグラフを出力するか決定します。

横にグラフを並べる

横にグラフを並べる場合、add_subplotの番号に指定する値は、左から順に1、2、3・・・となっています。

以下のプログラムは、横にグラフを並べて出力するプログラムです。

import matplotlib.pyplot as plt

x1, y1 = range(0, 3), [32, 12, 47]
x2, y2 = range(0, 3), [8, 38, 28]
label = ["A", "B", "C"]
fig = plt.figure()

ax1 = fig.add_subplot(1, 2, 1)   #1行2列の1番目
ax1.bar(x1, y1, tick_label=label)
ax1.set_title("title1")

ax2 = fig.add_subplot(1, 2, 2)   #1行2列の2番目
ax2.bar(x2, y2, tick_label=label)
ax2.set_title("title2")

plt.tight_layout()
plt.show()

実行結果

番号に1と指定したax1のグラフが左に、2と指定したax2のグラフが右に描かれています。

縦にグラフを並べる

縦にグラフを並べる場合、add_subplotの番号に指定する値は、上から順に1、2、3・・・となっています。

以下のプログラムは、縦にグラフを並べて出力するプログラムです。

import matplotlib.pyplot as plt

x1, y1 = range(0, 3), [32, 12, 47]
x2, y2 = range(0, 3), [8, 38, 28]
label = ["A", "B", "C"]
fig = plt.figure()

ax1 = fig.add_subplot(2, 1, 1)   #2行1列の1番目
ax1.bar(x1, y1, tick_label=label)
ax1.set_title("title1")

ax2 = fig.add_subplot(2, 1, 2)   #2行1列の2番目
ax2.bar(x2, y2, tick_label=label)
ax2.set_title("title2")

plt.tight_layout()
plt.show()

実行結果

番号に1と指定したax1のグラフが上に、2と指定したax2のグラフが下に描かれています。

上に2つ、下に2つのグラフを並べる

縦横に複数のグラフを並べる場合、add_subplotの番号に指定する値は、左上から右端まで進み、次は1段下がった左端から右端まで進み、これを繰り返していきます。

以下の図は、上に2つ、下に二つのグラフを並べる場合の番号です。

以下のプログラムは、上に2つ、下に2つのグラフを並べて出力するプログラムです。

import matplotlib.pyplot as plt

x1, y1 = range(0, 3), [32, 12, 47]
x2, y2 = range(0, 3), [21, 4, 29]
x3, y3 = range(0, 3), [2, 31, 42]
x4, y4 = range(0, 3), [14, 18, 3]

label = ["A", "B", "C"]
fig = plt.figure()

ax1 = fig.add_subplot(2, 2, 1)   #2行2列の1番目
ax1.bar(x1, y1, tick_label=label)
ax1.set_title("title1")

ax2 = fig.add_subplot(2, 2, 2)   #2行2列の2番目
ax2.bar(x2, y2, tick_label=label)
ax2.set_title("title2")

ax3 = fig.add_subplot(2, 2, 3)   #2行2列の3番目
ax3.bar(x3, y3, tick_label=label)
ax3.set_title("title3")

ax4 = fig.add_subplot(2, 2, 4)   #2行2列の4番目
ax4.bar(x4, y4, tick_label=label)
ax4.set_title("title4")

plt.tight_layout()
plt.show()

実行結果

番号に1と指定したax1のグラフが左上に、2と指定したax2のグラフが右上に、3と指定したax3のグラフが左下に、4と指定したax4のグラフが右下に描かれています。

軸の値を合わせる、共有する

グラフを並べたときに、軸の値が下の図のように異なっていたら、パッと見ただけでは、両者にそこまで大きな違いがないように見えてしまいます。

そのためグラフを並べる時には、軸の値を合わせるか、軸を共有する方が視覚的に両者のグラフの特徴をつかみやすいです。

軸の値を合わせる

以下のプログラムはy軸の値を合わせるプログラムです。

import matplotlib.pyplot as  plt

x1, y1 = range(0, 3), [23, 39, 31]
x2, y2 = range(0, 3), [12, 20, 5]

label = ["A", "B", "C"]
fig = plt.figure()

ax1 = fig.add_subplot(1, 2, 1)
ax1.bar(x1, y1, tick_label=label)
ax1.set_title("title1")
ymin, ymax = plt.ylim()   #ax1のy軸の最大値、最小値を入手

ax2 = fig.add_subplot(1, 2, 2)
ax2.bar(x2, y2, tick_label=label)
ax2.set_title("title2")
plt.ylim(ymin, ymax) #ax2のy軸の範囲をax1のy軸の最大値、最小値に合わせる

plt.tight_layout()
plt.show()

実行結果

初めに、plt.ylim()で、ax1のy軸の最大値、最小値を入手します。
そして、plt.ylim(ymin, ymax)とすることで、ax2のy軸の範囲をax1のy軸の最大値、最小値に合わせます。

ax1のy軸の範囲ax2のy軸の範囲よりも小さい場合には、ax2が正しく表示されなくなってしまいます

軸の値を共有する

以下のプログラムはy軸を共有するプログラムです。

import matplotlib.pyplot as  plt

x1, y1 = range(0, 3), [23, 39, 31]
x2, y2 = range(0, 3), [12, 20, 5]

label = ["A", "B", "C"]

#y軸を共有する、1行2列のサブプロットを追加する
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, sharey=True)

ax1.bar(x1, y1, tick_label=label)
ax1.set_title("title1")

ax2.bar(x2, y2, tick_label=label)
ax2.set_title("title2")

plt.tight_layout()
plt.show()

実行結果

軸の値を合わせる、または共有することによって、両者の違いがはっきりとわかるようになりましたね!

まとめ

今回の記事では、Matplotlibを使用して複数のグラフを1つの画像に並べて出力する以下の4つの方法を紹介しました。

  • 横にグラフを並べる方法
     →番号に指定する値は、左から順に1、2、3・・・
  • 縦にグラフを並べる方法
     →番号に指定する値は、上から順に1、2、3・・・
  • 上に2つ下に2つのように複数のグラフを並べる方法
     →y軸の範囲に注意
  • 軸の値を合わせる、共有する方法
     →sharey=Trueとする
Python初心者
グラフを並べる時は、軸の値を合わせた方がわかりやすいね!

Matplotlibでは、add_subplot()を使うことで、簡単に複数のグラフを並べることができるので是非試してみてください!

広告