Matplotlibで2つのヒストグラムのビン幅を揃える方法
Matplotlibで2つのヒストグラムを比較する際、ビン幅が異なると正確な比較ができません。そこで、データセット全体から共通のビン境界を計算することで、両方のヒストグラムのビン幅を揃えることができます。
手順
ランダムデータ a と、正規分布に基づくデータ b を作成します。
共通のビン幅を定義するための変数 bins を初期化します。
hist() メソッドを使って、a と共通ビンでヒストグラムを描画します。
hist() メソッドを使って、b と同じ共通ビンでヒストグラムを描画します。
図を表示するには show() メソッドを使用します。
サンプルコード
import numpy as np from matplotlib import pyplot as plt plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True a = np.random.random(100) * 0.5 b = 1 - np.random.normal(size=100) * 0.1 bins = 10 bins = np.histogram(np.hstack((a, b)), bins=bins)[1] plt.hist(a, bins, edgecolor='black') plt.hist(b, bins, edgecolor='black') plt.show()
ポイント解説
このコードの重要な部分は次の行です。
bins = np.histogram(np.hstack((a, b)), bins=bins)[1]
np.hstack((a, b)) で2つのデータセットを1つに結合し、結合したデータ全体に対して np.histogram() を実行しています。その戻り値の2番目の要素(ビンの境界値の配列)を取り出すことで、両方のデータセットをカバーする共通のビン境界を作成できます。
こうして得られた共通ビンを plt.hist() の第2引数として渡すことで、2つのヒストグラムがまったく同じビン幅・ビン位置で描画され、視覚的な比較が容易になります。また、edgecolor='black' を指定すると各バーの輪郭が黒で描かれ、重なり合う領域も見分けやすくなります。
出力結果

実行すると、ランダムデータ a と正規分布データ b が同一のビン境界を持つヒストグラムとして1つの図に表示されます。これにより、分布の形状や範囲の違いを正確に比較できるようになります。
-
MatplotlibでLaTeX出力と同じフォントを表示する方法
MatplotlibのグラフでLaTeX風フォントを使用する方法Matplotlibでグラフを作成する際、軸ラベルやタイトルをLaTeXと同じ数式フォントで表示したいケースは多くあります。LaTeX形式($...$ で囲まれた記法)を使えば、数式を美しく描画できます。ここでは、sin関数のカーブをLaTeX表記でプロットし、タイトルにカスタムフォントを適用する手順を紹介します。実装の手順NumPyを使って x 軸のデータポイントを作成します。y = sin(x) に基づいて y 軸のデータポイントを作成します。LaTeX表記(r$\sin (x)$)を使用して、x と y の曲線をプロットしま
-
Pythonでヒストグラムに対数ビンを設定する方法
Matplotlibのplt.hist()メソッドでは、bins引数に値を指定することで、ヒストグラムを描画する際に対数ビン(ログスケールの区切り)を設定できます。この記事では、np.logspace()を使って対数スケール上に等間隔に配置されたビンを生成し、それをヒストグラムに適用する手順を解説します。 手順 範囲が100の配列xを作成します。 plt.hist()メソッドでヒストグラムを描画します。bins引数には、対数スケール上で等間隔に配置された数値を返すnp.logspace()を渡し、対数ビンを指定します。 plt.gca()で現在の軸を取得し(存在しない場合は自動的に作成されま