Matplotlibでカスタマイズした凡例シンボルをプロットに表示する方法
Matplotlibでは、HandlerPatchクラスを継承して独自のハンドラを作成することで、凡例にカスタマイズされたシンボル(例:楕円形)を表示できます。ここでは、円のパッチを楕円として描画するカスタム凡例ハンドラの作成方法を解説します。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- HandlerPatchクラスを継承したクラスを定義し、
create_artistsメソッドをオーバーライドして、楕円パッチを作成・返却するようにします。 - Circleクラスを使って、プロット上に円を描画します。
add_patch()メソッドで、現在の軸(Axes)に円のパッチを追加します。- legend()メソッドを使い、
handler_map引数にカスタムハンドラを指定して凡例を配置します。 - show()メソッドで図を表示します。
コード例
import matplotlib.pyplot as plt, matplotlib.patches as mpatches
from matplotlib.legend_handler import HandlerPatch
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
class HandlerEllipse(HandlerPatch):
def create_artists(self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans):
center = 0.5 * width - 0.5 * xdescent, 0.5 * height - 0.5 * ydescent
p = mpatches.Ellipse(xy=center, width=width + xdescent, height=height + ydescent)
self.update_prop(p, orig_handle, legend)
p.set_transform(trans)
return [p]
c = mpatches.Circle((0.5, 0.5), 0.25, facecolor="green", edgecolor="red", linewidth=1)
plt.gca().add_patch(c)
plt.legend([c], ["An ellipse,Customized legend element"],
handler_map={mpatches.Circle: HandlerEllipse()})
plt.show()
コードのポイント
- HandlerEllipseクラスは、元のハンドル(この場合はCircle)を受け取り、代わりにEllipseパッチを生成して返します。これにより、凡例上では円ではなく楕円形のシンボルが表示されます。
update_prop()を呼び出すことで、塗りつぶし色や枠線などのスタイル情報が元のパッチから新しい楕円へ引き継がれます。handler_map={mpatches.Circle: HandlerEllipse()}と指定することで、「Circle型のアーティストにはHandlerEllipseを使う」という対応付けが行われます。
出力結果

この手法を応用すれば、星形・多角形など任意の形状を凡例シンボルとして使用できるため、データの種類を直感的に伝えるグラフを作成できます。
-
MatplotlibでSeabornプロットの凡例(レジェンド)のフォントサイズを大きくする方法
Seabornプロットの凡例(レジェンド)のフォントサイズを大きくしたい場合は、fontsize変数を定義し、それをlegend()メソッドの引数として渡すことで実現できます。手順Pandasを使ってデータフレームを作成します。キーは「number」「count」「select」とします。Seabornのbarplot()メソッドを使って棒グラフを描画します。凡例のフォントサイズを大きくするための変数fontsizeを初期化します。legend()メソッドを使い、fontsizeを引数に指定して図上に凡例を配置します。図を表示するには、show()メソッドを使用します。サンプルコードimpor
-
Matplotlibのプロットにテーブル(表)を配置する方法
データの可視化では、グラフと一緒に表形式のデータを表示したいケースがよくあります。Matplotlibではtable()メソッドを使うことで、プロット上に簡単にテーブルを配置できます。この記事では、pandasのデータフレームをもとに、Matplotlibのプロット内に見栄えの良いテーブルを作成する手順を解説します。 実装の手順 subplots()メソッドを使って、フィギュアサイズ(7, 7)のfigureとサブプロット(Axes)を作成します。 time(日時)と speed(速度)の2つの列を持つpandasのデータフレームを作成します。 df.shapeなどで配列のサイズを取得します