Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで凡例を自動作成する方法

Matplotlibで凡例を自動作成する方法

Matplotlibでは、散布図の凡例を一つずつ手動で定義しなくても、legend_elements()メソッドを活用することで、クラス(カテゴリ)やマーカーサイズに応じた凡例を自動的に生成できます。この記事では、その具体的な手順とサンプルコードをわかりやすく解説します。

自動凡例作成の手順

  • 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
  • サンプルデータ数を表す変数 N を初期化します。
  • NumPy を使用して x、y、c、s の各データを作成します。
  • subplots() メソッドで図(Figure)とサブプロット(Axes)を作成します。
  • 異なる色とサイズで xy のデータ点を散布図として描画します。
  • 軸(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」が自動的に表示されます。

  1. Matplotlibで凡例ボックスのサイズを調整する方法

    Matplotlibの凡例ボックスのサイズを調整するには、legend()メソッドのborderpad引数を使用します。borderpadの値を大きくするほど、凡例ボックス内の余白が広がり、ボックス全体のサイズも大きくなります。手順異なる線幅(linewidth)を持つ2つのリストを使って、line1とline2を作成します。図に凡例を配置し、凡例ボックスのサイズを調整するために、legend()メソッドでborderpad=2を指定します。図を表示するには、show()メソッドを使用します。サンプルコードfrom matplotlib import pyplot as plt plt.rcP

  2. Python Matplotlibで凡例アイテムを手動で追加する方法

    PythonのMatplotlibでは、plt.legend()メソッドを使うことで、グラフに凡例を簡単に作成できます。さらに、frameon引数を指定すると、凡例の周囲に枠線(ボーダー)を表示したままにすることが可能です。 手順 plt.xlabel()メソッドでX軸のラベルを設定します。 plt.ylabel()メソッドでY軸のラベルを設定します。 plot()メソッドでライン(折れ線)を描画します。 位置(loc)と凡例描画フラグを指定することで、最適な場所に凡例を配置し、枠線を表示させることができます。 「blue」と「orange」の要素を含む凡例を設定します。 plt.show