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/a655e3575e6a127a8ca4d080adde86217115bd7d6dd19cb861fe62e665fbf6b6.png](../_images/a655e3575e6a127a8ca4d080adde86217115bd7d6dd19cb861fe62e665fbf6b6.png)
![../_images/a655e3575e6a127a8ca4d080adde86217115bd7d6dd19cb861fe62e665fbf6b6.png](../_images/a655e3575e6a127a8ca4d080adde86217115bd7d6dd19cb861fe62e665fbf6b6.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/386bae598df20e0772a7115fd27fd4c7894849219dedc24f67e96b75c88e480e.png](../_images/386bae598df20e0772a7115fd27fd4c7894849219dedc24f67e96b75c88e480e.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/c2964454c732a91fbec2802809fa97733a4e69cad8640ad15277386061651610.png](../_images/c2964454c732a91fbec2802809fa97733a4e69cad8640ad15277386061651610.png)
![../_images/a655e3575e6a127a8ca4d080adde86217115bd7d6dd19cb861fe62e665fbf6b6.png](../_images/a655e3575e6a127a8ca4d080adde86217115bd7d6dd19cb861fe62e665fbf6b6.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/5af5d70b476e20f5c7b15e1046aa561a95dba2b6b171bffa9d4d6f1b1761917c.png](../_images/5af5d70b476e20f5c7b15e1046aa561a95dba2b6b171bffa9d4d6f1b1761917c.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/59a7cf4396fe2c31453c94463fab0ccf86dffecdcefde380d704aa617be8016b.png](../_images/59a7cf4396fe2c31453c94463fab0ccf86dffecdcefde380d704aa617be8016b.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/da017e4298a37b3123f40211fb296fe7e48ffd2e41b5ee4f322bb9d74562eb11.png](../_images/da017e4298a37b3123f40211fb296fe7e48ffd2e41b5ee4f322bb9d74562eb11.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/cdbd4924dfd8e24c774b7a2f4ab7a6f6c5e07067f5b156d845e8dde1de1da752.png](../_images/cdbd4924dfd8e24c774b7a2f4ab7a6f6c5e07067f5b156d845e8dde1de1da752.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/7687e684d3c509ec587c9286ff613b071ed854a5df4808dc960563848ee7b552.png](../_images/7687e684d3c509ec587c9286ff613b071ed854a5df4808dc960563848ee7b552.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/75a0abdec0c537958cad581c0eba172dd918c1402b8a8e52b663ac4420c76585.png](../_images/75a0abdec0c537958cad581c0eba172dd918c1402b8a8e52b663ac4420c76585.png)