【Matplotlib】凡例の表示

【Matplotlib】凡例の表示

凡例の表示・位置指定・消去

 matplotlib.axes.Axes.legend() は Axes (サブプロット) に 凡例 を添えます。
 凡例とは、Axes.plot() などの描画メソッドで label に渡したテキストのことです。デフォルト設定ではグラフと重ならないように位置を自動調整して表示されます。

# MATPLOTLIB_AXES_LEGEND

# In[1]

import matplotlib.pyplot as plt
import numpy as np

# FigureとAxes
fig = plt.figure(figsize =(4, 4))
ax = fig.add_subplot(111)
ax.grid()

# データを作成
x = np.linspace(-3, 3, 65)
f = x + 3
g = x**2

# データをプロット
ax.plot(x, f, label="y = x + 3", color="blue")
ax.plot(x, g, label="y = x**2", color="red")

# 凡例を表示
ax.legend()

 Matplotlib Axes.legend 1 デフォルトで凡例を表示

 loc オプションで 凡例の位置 (location) を指定できます。
 たとえば、"upper left" を指定すると左上に凡例が表示されます。

# In[2]

# 凡例を左上隅に表示
ax.legend(loc="upper left")

# グラフを再表示
display(fig)

 Matplotlib Axes.legend 2 左上に凡例を表示

 loc に指定可能な文字列とコードを表にまとめておきます。

文字列 コード
best 0
upper right 1
upper left 2
lower left 3
lower right 4
right 5
center left 6
center right 7
lower center 8
upper center 9
center 10

 Axes の左下隅を (0, 0)、右上隅を (1, 1) とする float のタプルで位置を指定することもできます。

# In[3]

# 凡例の位置を指定
ax.legend(loc=(0.62, 0.05))

# グラフを再表示
display(fig)

 Matplotlib Axes.legend 3 loc:凡例の位置を数値で指定

 凡例フレームを表示しないときは frameon に False を指定します。

# In[4]

# 凡例フレームを表示しない
ax.legend(frameon=False)

# グラフを再表示
display(fig)

 Matplotlib Axes.legend 4 frameon (凡例のフレームを消す)

 凡例フレームの角の丸めは fancybox、枠線の色は edgecolor で指定します。

# In[5]

# 凡例フレームの角を丸めない、枠線を黒にする
ax.legend(fancybox=False, edgecolor="black")

# グラフを再表示
display(fig)

 fancybox (角を丸める)、edgecolor (凡例の枠線の色)

 borderpad は凡例フレームの余白、shadow は影の有無を指定する引数です。

# In[6]

# 凡例の余白を設定、影をつける
ax.legend(borderpad=2, shadow=True)

# グラフを再表示
display(fig)

 borderpad (凡例の余白)、shadow (影)

 ncol で凡例の列数を指定できます。

# In[7]

# 凡例を2列で表示
ax.legend(ncol=2)

# グラフを再表示
display(fig)

 ncol:凡例の列数

 枠線の太さを変えたいときは、get_frame().set_linewidth() メソッドを使います。

# In[8]

# 枠線の太さを設定
ax.legend(edgecolor="black").get_frame().set_linewidth(1.5)

# グラフを再表示
display(fig)

 get_frame().set_linewidth 凡例の枠線の太さ

 凡例を消去したいときは、remove() メソッドを用います。

# In[9]

# 凡例を消去する
ax.get_legend().remove()

display(fig)

 Matplotlib 凡例の消去
 
 1 枚のサブプロットに sinx と cosx をプロットして 凡例 を添えるサンプルコードを載せておきます。

# MATPLOTLIB_LEGEND_SIN_COS

# In[1]

import numpy as np
import matplotlib.pyplot as plt

# FigureとAxes
fig = plt.figure()
ax = fig.add_subplot(111)

# xのデータを作成
x = np.arange(-4, 4, 0.1)

# yのデータを作成
f = np.cos(x)
g = np.sin(x)

# 軸ラベルの設定
ax.set_xlabel("x", size=12)
ax.set_ylabel("y", size=12)

# データをプロット
ax.plot(x, f, color="blue", label="cosx")
ax.plot(x, g, color="red", label="sinx")

# 凡例の設定
ax.legend(loc="upper right")

 Matplotlib Axes.legend()メソッドによる凡例設定

 関連記事:【Matplotlib】タイトルの設定
 関連記事:【Matplotlib】テキストの表示と書式設定