Matplotlibで複数の凡例エントリを持つヒストグラムを描画する方法
Matplotlibでは、ヒストグラムの各ビン(バー)に異なる色を割り当て、その色に対応した複数の凡例エントリを表示することができます。この記事では、hist()メソッドとRectangleパッチを組み合わせて、色分けされたヒストグラムに凡例を追加する手順を解説します。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
- numpyを使ってランダムデータを生成します。
- hist()メソッドでヒストグラムを描画します。
- 各パッチの塗りつぶしに使う色のリストを作成します。
- パッチを反復処理し、それぞれの面の色を設定します。
- 凡例を配置するためのハンドル(Rectangleオブジェクト)のリストを作成します。
- legend()メソッドで複数の凡例エントリを表示します。
- show()メソッドで図を表示します。
コード例
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Rectangle
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.rayleigh(size=1000) * 35
N, bins, patches = plt.hist(data, 30, ec="k")
colors = ["red", "yellow", "green"]
for i in range(0, len(bins)-1):
patches[i].set_facecolor(colors[i % len(colors)])
handles = [Rectangle((0, 0), 1, 1, color=c, ec="k") for c in colors]
labels = ["Red", "Yellow", "Green"]
plt.legend(handles, labels)
plt.show()コードのポイント
np.random.rayleigh(size=1000) * 35により、レイリー分布に従う1000個の乱数データを生成しています。plt.hist(data, 30, ec="k")は30個のビンでヒストグラムを作成し、戻り値のpatchesから各バーへアクセスできるようにしています。i % len(colors)を使うことで、赤・黄・緑の3色がビンに対して周期的に割り当てられます。- 凡例には実際のパッチではなく、同じ色を持つ
Rectangleオブジェクトをハンドルとして渡している点がポイントです。
出力結果

上記のコードを実行すると、レイリー分布に従うデータから作成されたヒストグラムが表示され、各ビンが赤・黄・緑の3色で塗り分けられます。図の右上には「Red」「Yellow」「Green」の3つの凡例エントリが並んで表示されます。
-
Matplotlibでnumpyのdatetime64型の時系列データをプロットする方法
PythonのMatplotlibを使って時系列データをグラフ化する方法を解説します。日付や時刻のデータ(datetime64型など)は、そのままplot()メソッドに渡すだけで自動的に軸に反映されるため、非常に簡単です。基本的な手順numpyを使ってx(日時)とy(数値)のデータを作成する。plot()メソッドで作成したxとyをプロットする。show()メソッドで図を表示する。サンプルコードimport matplotlib.pyplot as plt import datetime import numpy as np plt.rcParams[figure.figsize] = [7.
-
Matplotlibを使ってPythonで複数の図を横並びに描画する方法
Matplotlibで複数の図を並べて描画する手順 PythonのMatplotlibを使えば、subplot()メソッドを活用することで、複数の図を1つのウィンドウ内に横一列に並べて簡単に表示できます。ここでは、同じランダムデータを4種類のカラーマップで可視化する例を紹介します。 具体的には、以下の手順で実装します。 numpyを使ってランダムなデータ(5×5の行列)を作成します。 plt.subplot(nrows, ncols, index)で現在の図にサブプロットを追加します。今回は「nrows=1、ncols=4」のレイアウトで、index=1から順に配置していきます。 imsho