Matplotlibで凡例を自動作成する方法
Matplotlibで凡例を自動作成する方法
Matplotlibでは、散布図の凡例を一つずつ手動で定義しなくても、legend_elements()メソッドを活用することで、クラス(カテゴリ)やマーカーサイズに応じた凡例を自動的に生成できます。この記事では、その具体的な手順とサンプルコードをわかりやすく解説します。
自動凡例作成の手順
- 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
- サンプルデータ数を表す変数 N を初期化します。
- NumPy を使用して x、y、c、s の各データを作成します。
- subplots() メソッドで図(Figure)とサブプロット(Axes)を作成します。
- 異なる色とサイズで x と y のデータ点を散布図として描画します。
- 軸(Axes)に凡例を配置します。
- 作成した凡例をアーティスト(artist)として図に追加します。
- PathCollection から凡例ハンドルとラベルを生成します。
- 再度、サイズ用の凡例を軸に配置します。
- show() メソッドで図を表示します。
コード例
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True N = 45 x, y = np.random.rand(2, N) c = np.random.randint(1, 5, size=N) s = np.random.randint(10, 220, size=N) fig, ax = plt.subplots() scatter = ax.scatter(x, y, c=c, s=s) legend1 = ax.legend(*scatter.legend_elements(), loc="lower left", title="Classes") ax.add_artist(legend1) handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6) legend2 = ax.legend(handles, labels, loc="upper right", title="Sizes") plt.show()
コードのポイント
このコードの鍵となるのは scatter.legend_elements() メソッドです。引数なしで呼び出すと、散布図の色(c)に基づいた凡例要素が自動的に返されます。一方、prop="sizes" を指定すると、マーカーのサイズ(s)に基づいた凡例要素を取得できます。
また、1つのAxesに複数の凡例を表示したい場合は注意が必要です。通常、ax.legend() を再度呼び出すと既存の凡例が上書きされてしまうため、最初の凡例は ax.add_artist(legend1) で明示的に図へ追加しておきます。これにより、「Classes」と「Sizes」の2種類の凡例を同時に表示できます。
実行結果
上記のコードを実行すると、ランダムに生成された45個のデータ点からなる散布図が描画され、左下にはクラスごとの色分けを示す凡例「Classes」、右上にはマーカーサイズの目安を示す凡例「Sizes」が自動的に表示されます。
-
Matplotlibで凡例ボックスのサイズを調整する方法
Matplotlibの凡例ボックスのサイズを調整するには、legend()メソッドのborderpad引数を使用します。borderpadの値を大きくするほど、凡例ボックス内の余白が広がり、ボックス全体のサイズも大きくなります。手順異なる線幅(linewidth)を持つ2つのリストを使って、line1とline2を作成します。図に凡例を配置し、凡例ボックスのサイズを調整するために、legend()メソッドでborderpad=2を指定します。図を表示するには、show()メソッドを使用します。サンプルコードfrom matplotlib import pyplot as plt plt.rcP
-
Python Matplotlibで凡例アイテムを手動で追加する方法
PythonのMatplotlibでは、plt.legend()メソッドを使うことで、グラフに凡例を簡単に作成できます。さらに、frameon引数を指定すると、凡例の周囲に枠線(ボーダー)を表示したままにすることが可能です。 手順 plt.xlabel()メソッドでX軸のラベルを設定します。 plt.ylabel()メソッドでY軸のラベルを設定します。 plot()メソッドでライン(折れ線)を描画します。 位置(loc)と凡例描画フラグを指定することで、最適な場所に凡例を配置し、枠線を表示させることができます。 「blue」と「orange」の要素を含む凡例を設定します。 plt.show