0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

matplotlibで凡例を手動で作成する方法

Posted at

はじめに

matplotlib では通常、plot したラインに label を付けて ax.legend() を呼ぶだけで凡例が作れます。しかし、実際のプロットとは別に「手動で凡例を作りたい」ケースもあります。

例えば、色や線種の組み合わせを明示したいけど、プロットの中には出したくない場合などです。そんなときは matplotlib.lines.Line2D を使って、凡例のハンドル(見た目だけの線オブジェクト)を作成できます。

サンプルコード

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

fig, ax = plt.subplots(figsize=(6, 4))

# ダミーのプロット(凡例には使わない)
ax.plot([0, 1], [0, 1], color='gray', linestyle=':')

# 凡例用のハンドルを手動で作成
legend_handles = [
    Line2D([0], [0], color='r', linestyle='-', label='RP1'),
    Line2D([0], [0], color='r', linestyle='--', label='Target1'),
    Line2D([0], [0], color='g', linestyle='-', label='RP2'),
    Line2D([0], [0], color='g', linestyle='--', label='Target2'),
    Line2D([0], [0], color='b', linestyle='-', label='RP3'),
    Line2D([0], [0], color='b', linestyle='--', label='Target3'),
    Line2D([0], [0], color='y', linestyle='-', label='RP4'),
    Line2D([0], [0], color='y', linestyle='--', label='Target4'),
]

# 凡例を追加
ax.legend(
    handles=legend_handles,
    loc='upper center',
    bbox_to_anchor=(0.5, 1),  # プロットの外に出す
    ncol=4,
    fontsize=8,
    frameon=True
)

plt.show()

出力イメージ

plotlabelを指定していなくてもこのように凡例を手動で作ることができる.

image.png

ポイント

  • Line2D を使うと、実際に描画しなくても凡例用の線を作れる
  • labelLine2D 側で設定すれば、ax.legend(labels=...) は不要
  • bbox_to_anchor を調整すれば凡例の位置を細かくコントロール可能
  • ncol で列数を揃えると横並びに整理できる

まとめ

matplotlib で凡例を「完全に手動でコントロール」したいときは、Line2D を使って凡例用ハンドルを作成しましょう。これにより、プロット内容に依存しない柔軟な凡例の作成が可能になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?