本記事では、matplotlibでヒストグラムを表示する方法を解説します。ヒストグラムはデータの分布を視覚化するためのツールで、matplotlibを使えば簡単に作成できます。
基本的な方法
ヒストグラムを作成する最も基本的な方法は、plt.hist()
関数を使用することです。
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータの生成
data = np.random.randn(1000) # 標準正規分布からのランダムデータ
# ヒストグラムの作成
plt.hist(data)
plt.title('Basic Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()
# 出力: 標準正規分布のヒストグラムが表示される

この例では、1000個のランダムなデータポイントを生成し、それらの分布をヒストグラムとして表示しています。
詳細な設定
ヒストグラムの見た目や機能をカスタマイズするための様々なパラメータがあります。各パラメータの詳細は以下の通りです。
ビンの数と範囲
ヒストグラムのビン(区間)の数や範囲を指定できます。
パラメータ | 説明 | 指定可能な値 | デフォルト値 |
---|---|---|---|
bins | ヒストグラムの区間(ビン)の数や幅を指定 | 整数(区間の数)または配列(区間の境界値) | 10 |
range | データの表示範囲を制限 | (最小値, 最大値)の形式のタプル | None(全データ範囲) |
以下のコードでは、bins
でビンの数を指定し、range
でデータの範囲を制限しています。
# ビンの数を指定
plt.hist(data, bins=20)
plt.title('Histogram with 20 Bins')
plt.show()
# 出力: ビン数が20のヒストグラムが表示される
# ビンの範囲を指定
plt.hist(data, bins=30, range=(-3, 3))
plt.title('Histogram with Range Limited from -3 to 3')
plt.show()
# 出力: -3から3の範囲でビン数が30のヒストグラムが表示される


正規化と確率密度
データを正規化して確率密度として表示することができます。
パラメータ | 説明 | 指定可能な値 | デフォルト値 |
---|---|---|---|
density | ヒストグラムを正規化し、確率密度として表示するかどうか | True(正規化する)または False(正規化しない) | False |
alpha | ヒストグラムの透明度 | 0.0(完全に透明)から1.0(完全に不透明)までの小数値 | 1.0 |
以下のコードでは、density
でヒストグラムを正規化し、確率密度として表示しています。また、2つ目の例ではalpha
で透明度を設定し、理論的な正規分布曲線と比較しています。
# 正規化したヒストグラム
plt.hist(data, bins=30, density=True)
plt.title('Normalized Histogram')
plt.show()
# 出力: 面積が1になるように正規化されたヒストグラムが表示される
# 正規分布との比較
x = np.linspace(-4, 4, 100)
plt.hist(data, bins=30, density=True, alpha=0.6)
plt.plot(x, 1/(np.sqrt(2*np.pi)) * np.exp(-x**2/2), 'r-', linewidth=2)
plt.title('Comparison of Normalized Histogram and Normal Distribution')
plt.show()
# 出力: ヒストグラムと正規分布曲線が重ねて表示される


表示スタイルと向き
ヒストグラムの表示スタイルや向きを変更できます。
パラメータ | 説明 | 指定可能な値 | デフォルト値 |
---|---|---|---|
histtype | ヒストグラムの表示スタイル | ‘bar’(棒グラフ)<br>’barstacked’(積み上げ棒グラフ)<br>’step’(階段状の線)<br>’stepfilled’(塗りつぶされた階段状) | ‘bar’ |
orientation | ヒストグラムの表示方向 | ‘vertical’(縦方向)<br>’horizontal’(横方向) | ‘vertical’ |
figsize | グラフ全体のサイズ | (幅, 高さ)の形式のタプル(インチ単位) | matplotlibのデフォルト |
以下のコードでは、histtype
でヒストグラムの表示スタイルを変更し、orientation
で表示の向きを変更しています。また、figsize
でグラフのサイズを設定し、subplot
関数で複数のグラフを配置しています。
# 異なるヒストグラムタイプ
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.hist(data, histtype='bar', alpha=0.7)
plt.title('Bar Type (Default)')
plt.subplot(2, 2, 2)
plt.hist(data, histtype='step')
plt.title('Step Type (Outline Only)')
plt.subplot(2, 2, 3)
plt.hist(data, histtype='barstacked')
plt.title('Barstacked Type')
plt.subplot(2, 2, 4)
plt.hist(data, histtype='stepfilled', alpha=0.5)
plt.title('Stepfilled Type')
plt.tight_layout()
plt.show()
# 出力: 4つの異なるスタイルのヒストグラムが表示される
# 水平方向のヒストグラム
plt.hist(data, orientation='horizontal')
plt.title('Horizontal Histogram')
plt.show()
# 出力: 横向きのヒストグラムが表示される


対数スケールと色の設定
対数スケールの使用や色の設定ができます。
パラメータ | 説明 | 指定可能な値 | デフォルト値 |
---|---|---|---|
log | Y軸(頻度)を対数スケールで表示するかどうか | True(対数スケール)または False(線形スケール) | False |
color | ヒストグラムの塗りつぶし色 | 色の名前(’red’, ‘blue’など)<br>16進数コード(’#FF0000’など)<br>RGB値((1,0,0)など) | matplotlibのデフォルト色 |
edgecolor | ヒストグラムの枠線の色 | 色の名前、16進数コード、RGB値 | None(枠線なし) |
以下のコードでは、log
でY軸を対数スケールに設定し、color
でヒストグラムの色を、edgecolor
で枠線の色を指定しています。
# 対数スケールのヒストグラム
data_log = np.random.lognormal(0, 1, 1000) # 対数正規分布のデータ
plt.hist(data_log, bins=50, log=True)
plt.title('Histogram with Log Scale')
plt.show()
# 出力: Y軸が対数スケールのヒストグラムが表示される
# 色を指定したヒストグラム
plt.hist(data, color='skyblue', edgecolor='black')
plt.title('Histogram with Specified Colors')
plt.show()
# 出力: 水色で黒い枠線のヒストグラムが表示される


ラベルと複数データの表示
ラベルを付けたり、複数のデータセットを重ねて表示したりできます。
パラメータ | 説明 | 指定可能な値 | デフォルト値 |
---|---|---|---|
label | データセットのラベル(凡例に表示される名前) | 文字列 | None(ラベルなし) |
stacked | 複数のデータセットを積み上げて表示するかどうか | True(積み上げる)または False(重ねて表示) | False |
以下のコードでは、label
でデータセットにラベルを付け、legend()
関数で凡例を表示しています。また、前述のalpha
で透明度を設定し、複数のデータセットを重ねて表示したり、stacked
でデータセットを積み上げて表示したりしています。
# ラベル付きヒストグラム
plt.hist(data, label='Dataset 1')
plt.legend()
plt.title('Histogram with Labels')
plt.show()
# 出力: 凡例付きのヒストグラムが表示される
# 複数のデータセットを表示
data1 = np.random.normal(0, 1, 1000) # 平均0、標準偏差1
data2 = np.random.normal(2, 1.5, 1000) # 平均2、標準偏差1.5
plt.hist(data1, alpha=0.5, label='Dataset 1')
plt.hist(data2, alpha=0.5, label='Dataset 2')
plt.legend()
plt.title('Histogram Displaying Multiple Datasets')
plt.show()
# 出力: 2つのデータセットが重なったヒストグラムが表示される
# 積み上げヒストグラム
plt.hist([data1, data2], stacked=True, label=['Dataset 1', 'Dataset 2'])
plt.legend()
plt.title('Stacked Histogram')
plt.show()
# 出力: データセットが積み上げられたヒストグラムが表示される



まとめ
matplotlibを使ったヒストグラム表示の主なポイントは以下の通りです:
- 基本的なヒストグラムは
plt.hist(data)
で簡単に作成できる bins
パラメータでビンの数や幅を調整できるdensity=True
で正規化されたヒストグラムを表示できるhisttype
で表示スタイルを変更できるorientation
でヒストグラムの向きを変更できるlog=True
で対数スケールのヒストグラムを表示できるcolor
やedgecolor
で色をカスタマイズできるlabel
とplt.legend()
で凡例を表示できるstacked=True
で複数のデータセットを積み上げて表示できるplt.hist2d()
で2次元ヒストグラムを作成できる
これらのパラメータを組み合わせることで、データの分布を効果的に可視化するヒストグラムを作成できます。