Matplotlibのプロットからすべての凡例を取得するにはどうすればよいですか?
Matplotlibのプロットからすべての凡例(Legend)を取得するには、get_children()メソッドを使って軸が持つすべてのプロパティ(子要素)を取得し、それらを順番に反復処理します。各要素がLegendクラスのインスタンスであるかどうかを判定し、該当する場合はその凡例テキストを取り出すことができます。
手順
図のサイズを設定し、autolayoutを有効にしてサブプロット間や図の周囲の余白を自動調整します。
numpyを使ってx軸用のデータポイントを作成します。
図(figure)とサブプロット(axes)を作成します。
plot()メソッドを使い、ラベルと色を変えてsin(x)とcos(x)を描画します。
軸の子要素を取得し、その中から凡例のテキスト情報を抽出します。
図を表示するにはshow()メソッドを使用します。
サンプルコード
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-10, 10, 100)
fig, ax = plt.subplots()
ax.plot(np.sin(x), color='red', lw=7, label="y=sin(x)")
ax.plot(np.cos(x), color='orange', lw=7, label="y=cos(x)")
plt.legend(loc='upper right')
for item in ax.get_children():
if isinstance(item, matplotlib.legend.Legend):
print(item.texts)
plt.show()実行結果
このコードを実行すると、グラフの右上に凡例が表示され、コンソールには以下のように凡例内のテキストオブジェクトが出力されます。
[Text(0, 0, 'y=sin(x)'), Text(0, 0, 'y=cos(x)')]
解説
ax.get_children()は、軸(Axes)オブジェクトに含まれる線・テキスト・凡例などすべての子アーティストをリストとして返します。このリストに対してisinstance(item, matplotlib.legend.Legend)で型チェックを行うことで、凡例オブジェクトだけを確実に識別できます。取得した凡例オブジェクトのtexts属性には、凡例ラベルに対応するTextオブジェクトが格納されているため、これを参照することで凡例の文字列をプログラムから自由に取得・加工できます。
この手法は、凡例の内容を動的に確認したい場合や、後処理として凡例テキストを編集・保存したい場合に特に役立ちます。
-
MatplotlibでSeabornプロットの凡例(レジェンド)のフォントサイズを大きくする方法
Seabornプロットの凡例(レジェンド)のフォントサイズを大きくしたい場合は、fontsize変数を定義し、それをlegend()メソッドの引数として渡すことで実現できます。手順Pandasを使ってデータフレームを作成します。キーは「number」「count」「select」とします。Seabornのbarplot()メソッドを使って棒グラフを描画します。凡例のフォントサイズを大きくするための変数fontsizeを初期化します。legend()メソッドを使い、fontsizeを引数に指定して図上に凡例を配置します。図を表示するには、show()メソッドを使用します。サンプルコードimpor
-
Matplotlibで凡例ボックスのサイズを調整する方法
Matplotlibの凡例ボックスのサイズを調整するには、legend()メソッドのborderpad引数を使用します。borderpadの値を大きくするほど、凡例ボックス内の余白が広がり、ボックス全体のサイズも大きくなります。手順異なる線幅(linewidth)を持つ2つのリストを使って、line1とline2を作成します。図に凡例を配置し、凡例ボックスのサイズを調整するために、legend()メソッドでborderpad=2を指定します。図を表示するには、show()メソッドを使用します。サンプルコードfrom matplotlib import pyplot as plt plt.rcP