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

Matplotlibで同じ軸に複数の凡例を描画する方法

Matplotlibでは、plt.legend() を再度呼び出すと、先に作成した凡例が上書きされてしまうため、通常は1つの軸に1つの凡例しか表示できません。しかし、最初の凡例を add_artist() メソッドでアーティストとして現在の軸に追加しておけば、同じAxes上に複数の凡例を同時に描画できます。

実装の手順

  1. 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  2. 異なるラベル・線幅(linewidth)・線種(linestyle)を持つ2つのリストを使って線をプロットします。
  3. 1つ目の凡例を右上(upper right)の位置に配置します。
  4. add_artist() を使って、1つ目の凡例を現在の軸にアーティストとして追加します。
  5. 2つ目の凡例を右下(lower right)の位置に配置します。
  6. show() メソッドで図を表示します。

コード例

from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

line1, = plt.plot([1, 2, 3], label="Line 1", linestyle='--')
line2, = plt.plot([3, 2, 1], label="Line 2", linewidth=4)

first_legend = plt.legend(handles=[line1], loc='upper right')

plt.gca().add_artist(first_legend)
plt.legend(handles=[line2], loc='lower right')

plt.show()

出力結果

Matplotlibで同じ軸に複数の凡例を描画する方法

ポイント解説

このコードの重要なポイントは plt.gca().add_artist(first_legend) の部分です。plt.legend() は呼び出されるたびに既存の凡例を置き換えますが、add_artist() で一度軸に登録された凡例は固定されるため、その後の legend() 呼び出しの影響を受けません。

また、handles 引数に特定のLineオブジェクトを渡すことで、各凡例に表示する項目を個別に制御できます。この例では、破線の「Line 1」を右上の凡例に、太線の「Line 2」を右下の凡例に分けて表示しています。凡例の位置は loc 引数で指定でき、'upper left''center' なども利用可能です。

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

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

  2. Matplotlibを使ってPythonで複数の図を横並びに描画する方法

    Matplotlibで複数の図を並べて描画する手順 PythonのMatplotlibを使えば、subplot()メソッドを活用することで、複数の図を1つのウィンドウ内に横一列に並べて簡単に表示できます。ここでは、同じランダムデータを4種類のカラーマップで可視化する例を紹介します。 具体的には、以下の手順で実装します。 numpyを使ってランダムなデータ(5×5の行列)を作成します。 plt.subplot(nrows, ncols, index)で現在の図にサブプロットを追加します。今回は「nrows=1、ncols=4」のレイアウトで、index=1から順に配置していきます。 imsho