Matplotlibで凡例に行タイトルを追加して見やすく整理する方法
Matplotlibでは、ダミーのハンドル(空のプロット)を活用することで、凡例の中に行タイトル(見出し)を追加できます。複数の系列を含むグラフでも、凡例がカテゴリごとに整理されるため、格段に読みやすくなります。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
- NumPyを使ってyデータポイントを作成します。
- マーカーとラベルのリストを用意します。
- 図とサブプロットのセットを作成します。
- plot()メソッドで、異なるラベルとマーカーを指定しながら線を描画します。
- get_legend_handles_labels()で凡例用のハンドルとラベルを取得します。
- 行タイトルとして機能させる空のハンドル(ダミー)を作成します。
- legend()メソッドで凡例をプロット上に配置します。
- show()メソッドで図を表示します。
サンプルコード
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
y = np.exp(-np.arange(5))
markers = ["s", "o", "*"]
labels = ["one", "two"]
fig, ax = plt.subplots()
for i in range(6):
ax.plot(y * i + i / 2., marker=markers[i // 2], label=labels[i % 2])
h, l = ax.get_legend_handles_labels()
ph = [plt.plot([], marker="", ls="")[0]] * 2
handles = ph + h
labels = ["Title 1:", "Title 2:"] + l
plt.legend(handles, labels, ncol=4)
plt.show()
仕組みのポイント
このコードの鍵となるのは、plt.plot([], marker="", ls="") の部分です。これは何も描画されない空のラインオブジェクトを生成し、「Title 1:」「Title 2:」というラベルと組み合わせて凡例の先頭に挿入しています。結果として、このダミーハンドルが凡例内の行タイトルとして機能します。
また、ncol=4 を指定することで、凡例全体が4列の横並びレイアウトで表示され、タイトル行と各系列のエントリがコンパクトにまとまります。系列数が多いグラフでは、この手法を使うことで凡例の可読性を大きく向上させることができます。
出力結果

-
Matplotlibで凡例ボックスのサイズを調整する方法
Matplotlibの凡例ボックスのサイズを調整するには、legend()メソッドのborderpad引数を使用します。borderpadの値を大きくするほど、凡例ボックス内の余白が広がり、ボックス全体のサイズも大きくなります。手順異なる線幅(linewidth)を持つ2つのリストを使って、line1とline2を作成します。図に凡例を配置し、凡例ボックスのサイズを調整するために、legend()メソッドでborderpad=2を指定します。図を表示するには、show()メソッドを使用します。サンプルコードfrom matplotlib import pyplot as plt plt.rcP
-
Matplotlibでhist2dプロットにカラーバーを追加する方法
Matplotlibのhist2dプロット(2次元ヒストグラム)にカラーバーを追加するには、colorbar()メソッドの引数にスカラーマッピング可能なオブジェクト(ScalarMappable)を渡します。 実装手順 NumPyを使ってxとyのデータポイントを作成します。 subplots()メソッドを使って、図とサブプロットを作成します。 hist2d()メソッドを使って、2次元ヒストグラムを描画します。 hist2dから返されるスカラーマッピングオブジェクトをもとに、colorbar()でカラーバーを作成します。 show()メソッドを使って、図を表示します。 コード例 import