matplotlib ライブラリ

【python】matplotlibで凡例(legend)を表示する方法【位置変更、フォント変更、サイズ変更】

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.1, 0.9)

◆ loc = (0.6, 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 = 'center left' とした場合の実行結果

> 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と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" の場合

loc = "upper left"、bbox_to_anchor=(0, 0, 1, 1)

◆ bbox_to_anchor=(0.5, 0, 0.5, 1)、loc = "center left" の場合、

loc = "center left"、bbox_to_anchor=(0.5, 0, 0.5, 1)

> 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

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 に変更しています。

凡例に日本語を使用

凡例を日本語で入力すると、文字化けしてしまいます。

凡例の日本語が文字化けしている

前述の方法で、凡例のフォントを日本語対応のものに変更することで、凡例を日本語にしても文字化けしなくなります

以下、サンプルコードです。

### 凡例に日本語を使用する方法
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, ライブラリ
-,