matplotlibで凡例を表示する方法について紹介します。
本記事では、以下の内容を紹介しています。
この記事で分かること
- 【基本】凡例を表示する方法
- グラフ内の要素の数に対応した凡例を表示する方法
- 凡例を横並び(2列)に表示する方法
- 凡例の位置を変更する方法
- 凡例をプロットの外側(枠外)に配置する方法
- 凡例のフォントサイズを変更する方法
- 凡例のフォントを変更する方法
- 凡例に日本語を使用する方法
はじめに、基本的な内容として、凡例を表示する方法を紹介します。
そのあとに、表示位置の指定方法や、フォントサイズの変更方法などの、凡例の細かい調整方法について紹介します。
スポンサーリンク
凡例を表示する方法
はじめに、凡例を表示する方法を紹介します。
凡例は、以下の2つの方法で指定することが可能です。
- plot関数内の "label" で指定する方法
- legend関数で指定する方法
それぞれについて、サンプルコードを交えて紹介します。
plot関数内の "label" で指定する方法
plot関数で、引数 "label" を指定することで、凡例を指定できます。
なお、引数 "label" で表示する文字列を指定することはできますが、
表示させるためには、legend関数が必要になります。
以下、plot関数の引数 "label" で、凡例を指定するサンプルコードです。
### 凡例を表示する方法
import matplotlib.pyplot as plt
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o', label="squared")
plt.legend()
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.plot(data_x, data_y, linestyle='solid', marker='o', label="squared")
label = "squared" で、凡例として表示する文字列を指定しています。
plt.legend( )
legend関数で、凡例を表示しています。
legend関数で指定する方法
legend関数で、凡例を指定する方法を紹介します。
凡例名は、legend関数の中でリスト型で指定します。
以下、legend関数で、凡例を指定するサンプルコードです。
### 凡例を表示する方法
import matplotlib.pyplot as plt
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o', label="xxx")
plt.legend(["squared"])
plt.show()
実行結果は、先ほどのサンプルコードと同じになります。
> plt.legend(["squared"])
リストの要素で、凡例として表示する文字列を指定しています。
スポンサーリンク
グラフ内の要素の数に対応した凡例を表示する方法
グラフに複数の要素がある場合に、その要素の数に対応した凡例を表示する方法を紹介します。
と、いっても前述の内容とほとんど同じです。
以下、plot関数内のlabelで、凡例として表示する文字列を指定するサンプルコードです。
### グラフ内の要素の数に対応した凡例を表示する方法
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (5,5), facecolor='lightblue')
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(x, y1, linestyle='solid', marker='o', label='sin')
plt.plot(x, y2, linestyle='solid', marker='o', label='cos')
plt.legend()
plt.show()
コード実行後、表示されるグラフはこちらになります。
legend関数内で引数を渡しても、同様のことができます。
グラフに複数の要素がある場合には、legend関数にもリストの形で複数の要素を渡します。
### グラフ内の要素の数に対応した凡例を表示する方法
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (5,5), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y1, linestyle='solid', marker='o')
plt.plot(x, y2, linestyle='solid', marker='o')
plt.legend(['sin', 'cos'])
plt.show()
コード実行後に表示されるグラフは、前述のコードと同じになります。
凡例を横並び(2列)に表示する方法
凡例を横並びで表示する方法について紹介します。
legend関数に ncol=2 を引数として渡すことで、凡例を2列にして表示することができます。
以下、サンプルコードです。
### 凡例を横並び(2列)に表示する方法
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (5,5), facecolor='lightblue')
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(x, y1, linestyle='solid', marker='o', label='sin')
plt.plot(x, y2, linestyle='solid', marker='o', label='cos')
plt.legend(ncol=2)
plt.show()
コード実行後、表示されるグラフはこちらです。
> plt.legend( ncol=2 )
凡例を2列表示にするために、引数に ncol=2 を指定しています。
スポンサーリンク
凡例の位置を変更
次に、凡例の位置を指定する方法について、紹介します。
凡例の位置を指定する方法として、以下の3つの方法を紹介します。
- loc=(x,y)で凡例の位置を指定する方法
- loc="位置" で凡例の位置を指定する方法
- locとbbox_to_anchorで凡例の位置を指定する方法
判例の位置を指定する、それぞれの方法について、サンプルコードを交えながら紹介します。
loc=(x,y)で凡例の位置を指定
loc=(x,y)で、凡例の位置を指定する方法について紹介します。
loc=(x,y)を用いることで、左下を(0,0)として、凡例の位置を指定することができます。
以下、loc=(x,y)で凡例の位置を指定するサンプルコードです。
### loc=(x,y)で凡例の位置を指定
import matplotlib.pyplot as plt
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o', label="squared")
# loc=(x,y)で凡例の位置を指定
plt.legend(loc=(0.1, 0.9))
plt.show()
以下、実行結果です。
◆ loc = (0.1, 0.9) の場合
◆ loc = (0.6, 0.9) とした場合
> plt.legend(loc=(0.1, 0.9))
legend関数の引数として、loc=(x,y)を指定しています。
loc="位置" で凡例の位置を指定
loc="位置" で、凡例の位置を指定する方法について紹介します。
locに位置を表す文字列を渡すことで、凡例の位置を指定することができます。
以下、サンプルコードです。
### loc="位置" で凡例の位置を指定
import matplotlib.pyplot as plt
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o', label="squared")
locs = [
"upper left",
"upper right",
"lower left",
"lower right",
"center left",
"center right",
"upper center",
"lower center",
"center",
"best",
"right",
]
loc = locs[4]
plt.legend(loc=loc)
plt.show()
以下、実行結果です。
> loc = locs[4]
> plt.legend( loc=loc )
legend関数の引数として、loc=”位置”を指定しています。
前述のサンプルコードでは、loc = 'center left' となっています。
locとbbox_to_anchorで凡例の位置を指定
次に、locとbbox_to_anchorで、凡例の位置を指定する方法を紹介します。
bbox_to_anchor で範囲を指定し、その範囲内での相対位置をlocで指定することで、凡例の位置を指定することができます。
以下、簡単な説明図になります。
bbox_to_anchor = ( x, y, width, height ) で、範囲を指定し、
locで、bbox_to_anchor内の位置、例えば、"upper left"、"center left"、"lower left"などを指定します。
以下、locとbbox_to_anchorで凡例の位置を指定するサンプルコードです。
### locとbbox_to_anchorで凡例の位置を指定
import matplotlib.pyplot as plt
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o', label="squared")
locs = [
"upper left",
"upper right",
"lower left",
"lower right",
"center left",
"center right",
"upper center",
"lower center",
"center",
"best",
"right",
]
loc = locs[0]
# bbox_to_anchor内の相対位置で凡例の場所を指定
plt.legend(loc=loc, bbox_to_anchor=(0, 0, 1, 1))
plt.show()
以下、実行結果です。
◆ bbox_to_anchor=(0, 0, 1, 1)、loc = "upper left" の場合
◆ bbox_to_anchor=(0.5, 0, 0.5, 1)、loc = "center left" の場合、
> plt.legend( loc=loc, bbox_to_anchor = (0, 0, 1, 1) )
locには、 "upper left" を渡しています。
スポンサーリンク
凡例をプロットの外側(枠外)に配置
次に、凡例をプロットの外側(欄外)に配置する方法について、紹介します。
前述の、locとbbox_to_anchorによる指定方法で、凡例をプロットの外側に配置できます。
以下、サンプルコードです。
### 凡例をプロットの外側に配置
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (7,5), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y1, linestyle='solid', marker='o', label='sin')
plt.plot(x, y2, linestyle='solid', marker='o', label='cos')
plt.legend(bbox_to_anchor=(1.05, 1.0), loc='upper left')
plt.show()
コード実行後、表示されるグラフはこちらです。
> plt.legend(bbox_to_anchor=(1.05, 1.0), loc='upper left')
bbox_to_anchor で凡例を表示する範囲を指定しています。
プロットの外側になるように、(1.05, 1.0)としています。
凡例のフォントサイズを変更
次に、凡例のフォントサイズを変更する方法を紹介します。
legend関数の引数として、fontsizeを指定することで、凡例のフォントサイズを変更できます。
以下、サンプルコードです。
### 凡例のフォントサイズを変更
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (5,5), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y1, linestyle='solid', marker='o', label='sin')
plt.plot(x, y2, linestyle='solid', marker='o', label='cos')
plt.legend(fontsize=20)
plt.show()
コード実行後、表示されるグラフはこちらです。
> plt.legend(fontsize=20)
fontsize=20 を引数に渡し、フォントサイズを変更しています。
スポンサーリンク
凡例のフォントを変更
凡例のフォントを変更する方法を紹介します。
matplotlibで使用できるフォントは、以下のファイルをメモ帳などで開くと確認できます。
C:/Users/ユーザー名/.matplotlib/fontlist-v330.json
「name」の部分が、フォント名に対応します。
legend関数の引数 prop に、キーをfamilly、値をフォント名とした辞書を指定することで、フォントを変更できます。
以下、サンプルコードです。
### 凡例のフォントを変更
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (5,5), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y1, linestyle='solid', marker='o', label='sin')
plt.plot(x, y2, linestyle='solid', marker='o', label='cos')
plt.legend(prop={'family':'Courier New'})
plt.show()
コード実行後、表示されるグラフはこちらです。
> plt.legend(prop={'family':'Courier New'})
フォントを、Courier New に変更しています。
なお、matplotlibで使用できるフォントの一覧については、下記の記事で紹介しています。
凡例に日本語を使用
凡例を日本語で入力すると、文字化けしてしまいます。
前述の方法で、凡例のフォントを日本語対応のものに変更することで、凡例を日本語にしても文字化けしなくなります。
以下、サンプルコードです。
### 凡例に日本語を使用する方法
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig = plt.figure(figsize = (5,5), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y1, linestyle='solid', marker='o', label='数式1')
plt.plot(x, y2, linestyle='solid', marker='o', label='数式2')
plt.legend(prop={'family':'MS Gothic'})
plt.show()
コード実行後、表示されるグラフはこちらです。
> plt.legend(prop={'family':'MS Gothic'})
フォントに、MS Gothic を指定しています。
matplotlibのグラフに日本語を使用する方法や、日本語に対応したフォントについては、下記の記事で紹介しています。
スポンサーリンク