Matplotlib で凡例をプロットの外側に配置する方法

胡金庫 2023年1月30日
  1. bbox_to_anchor の例
  2. 凡例ボックスがトリミングされないようにするための bbox_extra_artists および bbox_inches
Matplotlib で凡例をプロットの外側に配置する方法

凡例は、bbox_to_anchor を使用して Matplotlib のプロットの外側に配置できます。bbox は、凡例を収容する bounding box を意味します。

plt.legend(bbox_to_anchor=(1.05, 1))

凡例は、座標軸の (1.05, 1) の位置に配置されます。(0, 0) は左下隅、(1.0, 1.0) は軸座標の右上隅です。

凡例のバウンディングボックスの実際のサイズと位置は、plt.legendbbox_to_anchorloc の 4 タプルパラメーターで定義されます。

plt.legend(bbox_to_anchor=(x0, y0, width, height), loc=)

widthheight は凡例ボックスの幅と高さで、(x0, y0) はバウンディングボックスの loc の座標です。

loc の値は、次のような関係を持つ数値または文字列にすることができます。

ロケーション番号 位置文字列
0 best
1 upper right
2 upper left
3 lower left
4 lower right
5 right
6 center left
7 center right
8 lower center
9 upper center
10 center
plt.legend(bbox_to_anchor=(1.05, 1.0, 0.3, 0.2), loc="upper left")

上記のコードは、凡例ボックスが幅 0.3 および高さ 0.2 の軸座標 (1.05, 1.0) に配置されることを意味します。ここで、(1.05, 1.0) は上部の座標です凡例の境界ボックスの左隅。

bbox_to_anchor の例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x), label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")

plt.legend(bbox_to_anchor=(1.05, 1.0), loc="upper left")
plt.tight_layout()
plt.show()

Matplotlib 凡例 bbox_to_anchor の例

plt.tight_layout() はサブプロットを図にうまく適合させます。

tight_layout() が呼び出されない場合、凡例ボックスはトリミングされます。

Matplotlib Legend bbox_to_anchor クロップ

凡例ボックスがトリミングされないようにするための bbox_extra_artists および bbox_inches

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

plt.plot(x, np.sin(x), label="sin(x)")
plt.plot(x, np.cos(x), label="cos(x)")

lg = plt.legend(bbox_to_anchor=(1.05, 1.0), loc="upper left")

plt.savefig(
    "example.png", dpi=300, format="png", bbox_extra_artists=(lg,), bbox_inches="tight"
)

bbox_extra_artists は、タイトな bbox を計算するときに考慮される Artist のリストを指定します。

bbox_inchestight に設定されている場合、Figure のタイトな bbox がわかります。

著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Matplotlib Legend