Matplotlibの凡例の設定#

公開日

この記事では、Matplotlibのグラフに凡例を表示する方法を解説します。

凡例の表示#

凡例を表示する方法はいくつかあります。

1つ目は、データをプロットする際にlabel引数でラベルを設定し、legend()メソッドで凡例を表示する方法です。

2つ目は、legend()メソッドにラベルを与える方法です。ラベルはリストで与えます。

それぞれの例を以下に示します。どちらも同じ結果となります。

import matplotlib.pyplot as plt

# label引数でラベルを設定する
fig, ax = plt.subplots()
ax.plot([1, 3, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend()
plt.show()

# legend()メソッドにラベルを与える
fig, ax = plt.subplots()
ax.plot([1, 3, 2])
ax.plot([3, 1, 1])
ax.legend(["data 1", "data 2"])
plt.show()
../_images/20e12d4948471f59f7948e334b2c5c773b6a185902393ce6f8c6170d0a7d41b7.png ../_images/20e12d4948471f59f7948e334b2c5c773b6a185902393ce6f8c6170d0a7d41b7.png

凡例の位置#

凡例の位置はlegend()メソッドのlocオプションで指定できます。デフォルト値はbest(プロットと凡例がなるべく重ならないように配置する)です。また、以下からも指定可能です。

---------------------------------------
|upper left |upper center|upper right |
---------------------------------------
|center left|center      |center right|
---------------------------------------
|lower left |lower center|lower right |
---------------------------------------

凡例の位置を左側中段 (center left) とした例を以下に示します。

fig, ax = plt.subplots()
ax.plot([1, 3, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend(loc="center left")
plt.show()
../_images/c562d3ab4a532f5a8afd4aba6bc9e0161e992520058bdcf030a1445c7965a953.png

また、凡例の位置はbbox_to_anchorオプションでも指定可能です。このオプションに座標を(x, y)で渡します。グラフの左下が(0, 0), 右上が(1, 1)となります。bbox_to_anchorにそれぞれ(0, 0)と(1, 1)を指定した例を以下に示します。

fig, ax = plt.subplots()
ax.plot([1, 3, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend(bbox_to_anchor=(0, 0))
plt.show()

fig, ax = plt.subplots()
ax.plot([1, 3, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend(bbox_to_anchor=(1, 1))
plt.show()
../_images/c5e9cdbaa797d094c8a92bd9c86ce77c8663b0fe19d60e062c6efb3b9c3d0fc5.png ../_images/20e12d4948471f59f7948e334b2c5c773b6a185902393ce6f8c6170d0a7d41b7.png

凡例の列数#

凡例の列数はlegend()メソッドのncolオプションで指定できます。以下は列数を2とした例です。

fig, ax = plt.subplots()
ax.plot([1, 3, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.plot([2, 2, 1], label="data 3")
ax.legend(ncol=2)
plt.show()
../_images/eddf3582f08727cc24a022ba4fd7fd329276a80e70890ff3fe3da82ae37d068a.png

凡例の色#

凡例の文字色はlegend()メソッドのlabelcolor, 背景色はfacecolor, 枠線の色はedgecolorでそれぞれ指定できます。また、背景色の透過度はframealphaで指定できます(0~1の範囲で指定し、値が小さいほど透明に近づきます)。

fig, ax = plt.subplots()
ax.plot([1, 3, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend(labelcolor="red", facecolor="blue", edgecolor="orange", framealpha=0.2)
plt.show()
../_images/25425b3614ebcfc31b8312c52e6d9795344838754585f28ed2af699b83f5fb4a.png

凡例の文字サイズ#

凡例の文字サイズはlegend()メソッドのfontsizeオプションで指定できます。整数または次のいずれかから指定可能です。 {"xx-small", "x-small", "small". "medium", "large", "x-large", "xx-large"}

fig, ax = plt.subplots()
ax.plot([1, 2, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend(fontsize=18)
plt.show()
../_images/19c0f28b0ffc3ccc12f72a162a8451870c1fcf8f33b1b6ce89809b987c8ff29c.png

凡例のタイトル#

凡例にタイトルを設定する場合、legend()メソッドのtitleオプションで指定できます。以下はタイトルを"Prices"と設定した例です。

fig, ax = plt.subplots()
ax.plot([1, 2, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
ax.legend(title="Prices")
plt.show()
../_images/07ff6e5550e65fddc8789e33e9aec2994e99cc29bc37495520974da926c2a14c.png

Figureに凡例を表示する#

上記の例では、Axesに凡例を表示していましたが、Figureに表示することも可能です。以下のようにFigureオブジェクトのlegend()メソッドを用います。

fig, ax = plt.subplots()
ax.plot([1, 2, 2], label="data 1")
ax.plot([3, 1, 1], label="data 2")
fig.legend()
plt.show()
../_images/556a8a64c782f702d68251d295bb7b3ee745e37a18cc4f2b185979018b4540a1.png

Figureオブジェクトに凡例を表示したケースとして、以下のように1つのFigureオブジェクトに複数のグラフがある場合が挙げられます。凡例を1つだけ表示することで、グラフの見た目をすっきりとさせられます。

fig, ax = plt.subplots(ncols=2)
ax[0].plot([1, 3, 2])
ax[0].plot([2, 2, 3])
ax[1].plot([1, 2, 1])
ax[1].plot([3, 1, 1])
fig.legend(["data 1", "data 2"], bbox_to_anchor=(1.17, 0.98))
fig.tight_layout()
plt.show()
../_images/b1dabc98b228b93c59f42642cfd806fdf85c7e0037c24173ee36ff8328488419.png