Matplotlib 複数のグラフ#

公開日

Matplotlibで複数のグラフを並べて表示するには、plt.subplots()nrowsncolsオプションを用います。nrowsncolsでそれぞれ縦方向と横方向のグラフの数を指定できます。

縦方向に並べる#

グラフを縦方向に並べる場合、nrowsに個数を指定します。以下に2つのグラフを縦に並べた例を示します。

import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2)
ax[0].plot([2, 3, 1])
ax[1].plot([3, 4, 0])
fig.tight_layout()
plt.show()
../_images/907df0c266f735dd6dfd84af88be504317780960a47c450c61fb68331f14ecd3.png

ncolsまたはnrowsの片方のみ指定した場合、axはAxesオブジェクトの1次元配列となります。また、fig.tight_layout()はグラフ間の間隔や余白を自動調節するためのコマンドです。

横方向に並べる#

グラフを横方向に並べる場合、ncolsに個数を指定します。以下に3つのグラフを横に並べた例を示します。

fig, ax = plt.subplots(ncols=3)
ax[0].plot([2, 3, 1])
ax[1].plot([3, 4, 0])
ax[2].plot([0, 3, 1])
fig.tight_layout()
plt.show()
../_images/073bccb35c95fb37eee2de23203d2a5d27d31b91f5e6cd7e2ff68caeeec6b93f.png

縦・横方向に並べる#

グラフを縦・横の両方向に並べる場合、nrowsncolsに個数を指定します。以下に縦と横にそれぞれ2つずつ並べた例を示します。

fig, ax = plt.subplots(nrows=2, ncols=2)
ax[0, 0].plot([2, 3, 1])
ax[0, 1].plot([3, 4, 0])
ax[1, 0].plot([0, 3, 1])
ax[1, 1].plot([2, 1, 0])
fig.tight_layout()
plt.show()
../_images/adfd3d2e78686b8bf54fced76fdb51e8f4b439d04d87cd6ecc0f59247dcac681.png

nrowsncolsの両方を指定した場合、axはAxesオブジェクトの2次元配列になります。ax[X, Y]は縦にX番目、横にY番目(いずれも0始まり)のAxesオブジェクトを示します。

共通な軸の範囲#

複数のグラフで軸が共通している場合、plt.subplots()sharexshareyオプションを使用して軸の範囲を揃えることが出来ます。sharex, shareyオプションに指定可能な値を以下の表に示します。

説明

False/'none'

軸を揃えない(デフォルト)

True/'all'

全グラフの軸を揃える

'row'

横方向のグラフのみ軸を揃える

'col'

縦方向のグラフのみ軸を揃える

sharex=Trueとした場合、最も下のグラフのみx軸の値が表示されます。同様にsharey=Trueとした場合、最も左のグラフのみy軸の値が表示されます。さらに、全てのグラフでx軸やy軸の範囲も共通となります。

fig, ax = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax[0, 0].plot([2, 3, 1])
ax[0, 1].plot([3, 4, 0])
ax[1, 0].plot([0, 3, 1])
ax[1, 1].plot([2, 1, 0])
fig.tight_layout()
plt.show()
../_images/be30bdf428a7acfd5fc782aa948504d2c58937c7a8ef786e148e2be6a7847dba.png

上のグラフと同じデータを用いて、sharey='row'に変更した例を以下に示します。こちらでは、行ごとにグラフのy軸の範囲を共通にします。すなわち、上2つのグラフと下2つのグラフで、それぞれ異なる軸の範囲となっています。

fig, ax = plt.subplots(nrows=2, ncols=2, sharex=True, sharey='row')
ax[0, 0].plot([2, 3, 1])
ax[0, 1].plot([3, 4, 0])
ax[1, 0].plot([0, 3, 1])
ax[1, 1].plot([2, 1, 0])
fig.tight_layout()
plt.show()
../_images/b2cd87eb343658e6f4abbaff0e1bccd3ed774f34833586f4ad4adb5a8cb4f5e8.png