【こつこつPython】PythonでFigureオブジェクトに複数グラフを表示する方法|Figure.add_subplot

Pythonで複数のグラフを表示する方法です。
使用するのはPythonのmatplotlibライブラリのadd_subplotメソッドです。

import matplotlib.pyplot as plt

add_subplotメソッドはFigureオブジェクトが持つメソッドです。
このメソッドを使うことで、FigureオブジェクトからAxesオブジェクトを作成することができます。

それでは、このようなデータを使用して、グラフを作成してみましょう。

x1 = [1, 2, 3, 4, 5]
y1 = [1, 5, 2, 4, 3]
x2 = [1, 2, 3, 4, 5]
y2 = [5, 1, 4, 2, 3]

まず、2つのグラフを左右に並べて表示させてみましょう。
最初に、figure関数を使用してFigureオブジェクトを作成します。
次にFigureオブジェクトのadd_subplotメソッドを使用して、Axesオブジェクトを作成します。
引数に横に分割する数、縦に分割する数、グラフのインデックスを指定します。
グラフのインデックスは左上を1として、右下方向に順に振られます。
今回は2つのグラフを作成するので、それぞれ変数ax1、ax2に代入します。
実行します。

fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
plt.show()

Figureオブジェクトの中に、2つのAxesオブジェクトを作成できました。

この2つのAxesオブジェクトの中に、plotメソッドを使用して、それぞれ折れ線グラフを作成してみましょう。
実行します。

fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1)
ax1.plot(x1, y1)
ax2 = fig.add_subplot(1, 2, 2)
ax2.plot(x2, y2)
plt.show()

2つの折れ線グラフを左右に並べて表示できました。

また、引数にタイトルや軸ラベルも指定できます。
更に、tight_layout関数を使用すると、軸ラベルが重なることなく表示できます。
実行します。

fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1, title="data1", xlabel="x-1", ylabel="y-1")
ax1.plot(x1, y1)
ax2 = fig.add_subplot(1, 2, 2, title="data2", xlabel="x-2", ylabel="y-2")
ax2.plot(x2, y2)
plt.tight_layout()
plt.show()

タイトルや軸ラベルも追加できました。

さらに、第三引数のグラフのインデックスをタプルで指定することで、複数の領域にまたがるグラフも作成できます。
先ほどのグラフのエリアを4分割にし、下に棒グラフを表示させてみましょう。
2かける2の4分割にするので、第一引数、第二引数は共に2を指定します。
実行します。

fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot(x1, y1)
ax2 = fig.add_subplot(2, 2, 2)
ax2.plot(x2, y2)
ax3 = fig.add_subplot(2, 2, (3,4))
ax3.bar(x1, y1)
plt.tight_layout()
plt.show()

グラフを縦と横に並べて表示できました。

subplot関数、subplots関数、add_subplotメソッドは、いずれも複数のグラフを表示できます。
好みに合わせて、使う関数やメソッドを選びましょう。

関連メソッド

【こつこつPython】Pythonで複数グラフを表示する方法|matplotlib.pyplot.subplot

【こつこつPython】Pythonでfigureオブジェクトを作成して複数グラフを表示する方法|matplotlib.pyplot.subplots

【こつこつPython】PythonでFigureオブジェクトを作成する方法|matplotlib.pyplot.figure

【こつこつPython】PythonでAxesオブジェクト(グラフ)を作成する方法|matplotlib.pyplot.axes