Python
 Computer >> コンピューター >  >> プログラミング >> Python

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オブジェクトをハンドルとして渡している点がポイントです。

出力結果

Matplotlibで複数の凡例エントリを持つヒストグラムを描画する方法

上記のコードを実行すると、レイリー分布に従うデータから作成されたヒストグラムが表示され、各ビンが赤・黄・緑の3色で塗り分けられます。図の右上には「Red」「Yellow」「Green」の3つの凡例エントリが並んで表示されます。

  1. 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.

  2. Matplotlibを使ってPythonで複数の図を横並びに描画する方法

    Matplotlibで複数の図を並べて描画する手順 PythonのMatplotlibを使えば、subplot()メソッドを活用することで、複数の図を1つのウィンドウ内に横一列に並べて簡単に表示できます。ここでは、同じランダムデータを4種類のカラーマップで可視化する例を紹介します。 具体的には、以下の手順で実装します。 numpyを使ってランダムなデータ(5×5の行列)を作成します。 plt.subplot(nrows, ncols, index)で現在の図にサブプロットを追加します。今回は「nrows=1、ncols=4」のレイアウトで、index=1から順に配置していきます。 imsho