matplotlibでヒストグラムを表示する方法を解説

Python

本記事では、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()
# 出力: 横向きのヒストグラムが表示される

対数スケールと色の設定

対数スケールの使用や色の設定ができます。

パラメータ説明指定可能な値デフォルト値
logY軸(頻度)を対数スケールで表示するかどうか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で対数スケールのヒストグラムを表示できる
  • coloredgecolorで色をカスタマイズできる
  • labelplt.legend()で凡例を表示できる
  • stacked=Trueで複数のデータセットを積み上げて表示できる
  • plt.hist2d()で2次元ヒストグラムを作成できる

これらのパラメータを組み合わせることで、データの分布を効果的に可視化するヒストグラムを作成できます。

タイトルとURLをコピーしました