Matplotlibで同じ凡例エントリに複数の凡例キーを作成する方法
Matplotlibでは、HandlerTupleを利用することで、1つの凡例エントリに複数の凡例キー(ハンドル)をまとめて表示できます。複数のデータ系列を「同じ種類のデータ」として1つの凡例に統合したい場合に便利なテクニックです。
以下の手順で実装できます。
- 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
- plot()メソッドを使ってline1とline2の2本の線を描画します。
- legend()メソッドで凡例を配置します。このとき、ハンドルをタプル形式で渡し、numpoints=1を指定します。さらにhandler_map引数にHandlerTupleを登録することで、タプル内のすべてのハンドルが1つのエントリに結合されます。
- show()メソッドで図を表示します。
コード例
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerTuple
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
p1, = plt.plot([1, 2.5, 3], 'r-d')
p2, = plt.plot([3, 2, 1], 'k-o')
l = plt.legend([(p1, p2)], ['Two keys'], numpoints=1,
handler_map={tuple: HandlerTuple(ndivide=None)})
plt.show()
コードのポイント
このコードでは、赤い破線+ダイヤモンドマーカーの線(p1)と、黒い実線+丸マーカーの線(p2)を描画しています。(p1, p2)のようにタプルでハンドルを渡すことが重要で、HandlerTuple(ndivide=None)を指定すると、2つの線スタイルが横並びで1つの凡例キーとして表示されます。
出力結果

-
Matplotlibで2つのヒストグラムのビン幅を揃える方法
Matplotlibで2つのヒストグラムを比較する際、ビン幅が異なると正確な比較ができません。そこで、データセット全体から共通のビン境界を計算することで、両方のヒストグラムのビン幅を揃えることができます。手順ランダムデータ a と、正規分布に基づくデータ b を作成します。共通のビン幅を定義するための変数 bins を初期化します。hist() メソッドを使って、a と共通ビンでヒストグラムを描画します。hist() メソッドを使って、b と同じ共通ビンでヒストグラムを描画します。図を表示するには show() メソッドを使用します。サンプルコードimport numpy as np from
-
Pythonのmatplotlibで1つのページに複数のプロットを作成する方法
Pandasとmatplotlibを組み合わせることで、データフレームから図(figure)と軸(axis)を簡単に作成し、scatterメソッドを使って点をプロットできます。ここでは、学生の人数と取得点数の関係を散布図として可視化する手順を紹介します。 実装の手順 学生のリスト、各学生が取得した点数のリスト、スコアごとの色分け用リストを作成します。 PandasのDataFrameを使って、手順1のデータからデータフレームを作成します。 subplotsメソッドでfigとax変数を作成します。デフォルトでは行数(nrows)と列数(ncols)はどちらも1に設定されています。 plt.xl