matplotlib ライブラリ

【python】matplotlibでヒストグラムを作成【ビン数、横幅、正規化、複数】

pythonのグラフ描画ライブラリである「matplotlib」を用いて、ヒストグラムを作成する方法について紹介します。

本記事では、下記の内容を紹介しています。

この記事で分かること

  • ヒストグラムを作成
  • ヒストグラムのビン数を変更
  • ヒストグラムの幅と横軸を合わせる方法(ビン数算出)
  • ヒストグラムを正規化
  • ヒストグラムのビンに枠線を表示
  • matplotlibで複数のヒストグラムを表示

はじめに、基本的な内容として、ヒストグラムを作成する方法を紹介します。

そのあとに、ビン数の変更方法、正規化方法、複数のヒストグラムを重ねて表示する方法など、ヒストグラムを見やすく表示する方法について紹介します。

スポンサーリンク

matplotlibでヒストグラムを作成する方法

はじめに、matplotlibでヒストグラムを作成する方法を紹介します。

matplotlibには、ヒストグラムを描画するためのメソッドである、 matplotlib.pyplot.hist が用意されています。

このメソッドを使用して、ヒストグラムを作成します。

matplotlib.pyplot.hist の引数の指定方法について、 公式ドキュメント から引用しました。

matplotlibのhistの記述方法

matplotlib 公式ドキュメント

詳しい使い方については、公式ドキュメントでご確認ください。

以下、matplotlib.pyplot.hist を用いてヒストグラムを作成するサンプルコードです。

### matplotlib.pyplot.histでヒストグラムを生成
import numpy as np
import matplotlib.pyplot as plt

# 平均0、標準偏差10、の正規分布の乱数を1,000個生成
x = np.random.normal(0, 10, 1000)

fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.xlabel('X')
plt.ylabel('Y')

plt.hist(x)

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist( x )

matplotlib.pyplot.hist に、ヒストグラム生成用のリスト "x" を引数として渡しています。

matplotlibでヒストグラムのビン(階級)の数を変更する方法

つぎに、matplotlibのヒストグラムのビン数を変更する方法を紹介します。

引数に "bins=" を指定することで、ヒストグラムのビン数を変更できます。

以下、サンプルコードです。

### ヒストグラムのビンの数を変更
import numpy as np
import matplotlib.pyplot as plt

# 平均0、標準偏差10、の正規分布の乱数を1,000個生成
x = np.random.normal(0, 10, 1000)

fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.xlabel('X')
plt.ylabel('Y')

plt.hist(x,  bins=20)

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist(x, bins=20)

ヒストグラム生成用のリスト "x" に加え、binsも引数として指定しています。

スポンサーリンク

matplotlibでヒストグラムの幅と横軸を合わせる方法(ビン数算出方法)

先ほどのようにビンの数だけ指定した場合、ビンの横幅がグラフの横軸と対応していません。

このままではヒストグラムとして見やすくはないので、ビンの横幅とグラフの横軸を対応させる方法を紹介します。

引数に "range=" を指定することで、ヒストグラムのビンの最小値と最大値を変更できます。

以下、サンプルコードです。

### ヒストグラムの幅と横軸を合わせる
import numpy as np
import matplotlib.pyplot as plt

# 平均0、標準偏差10、の正規分布の乱数を1,000個生成
x = np.random.normal(0, 10, 1000)

fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.hist(x, bins=20, range=(-50, 50))

plt.xlabel('X')
plt.ylabel('Y')

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist(x, bins=20, range=(-50, 50))

rangeで、ビンの最小値、最大値を指定しています。
-50 ~ 50の範囲100を、20個のビンで分割するため、ビン1つあたりの幅は5になります。

ビン1つあたりの幅と、軸の刻みが対応しているので、ヒストグラムが見やすくなっています。

matplotlibでヒストグラムを正規化する方法

matplotlibで、ヒストグラムを正規化する方法を紹介します。

引数に "density = True" を指定することで、ヒストグラムを正規化(面積を1にする)できます。

以下、サンプルコードです。

### ヒストグラムを正規化
import numpy as np
import matplotlib.pyplot as plt

# 平均0、標準偏差10、の正規分布の乱数を1,000個生成
x = np.random.normal(0, 10, 1000)

fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.xlabel('X')
plt.ylabel('Y')

plt.hist(x,  bins=20, range=(-50, 50), density=True)

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist(x, bins=20, range=(-50, 50), density=True)

引数に、density=Trueを指定しています。

スポンサーリンク

matplotlibでヒストグラムのビンに枠線を表示する方法

matplotlibで、ヒストグラムのビンに枠線を表示する方法について紹介します。

引数に "ec =" を指定することで、ビンの枠線を表示できます。
なお、ecは「edge color」の略です。

以下、サンプルコードです。

### ヒストグラムのビンに枠線を表示
import numpy as np
import matplotlib.pyplot as plt

# 平均0、標準偏差10、の正規分布の乱数を1,000個生成
x = np.random.normal(0, 10, 1000)

fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.xlabel('X')
plt.ylabel('Y')

plt.hist(x,  bins=20, range=(-50, 50), density=True, ec='black')

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist(x, bins=20, range=(-50, 50), density=True, ec='black')

引数に、ec='black' を指定しています。

matplotlibで複数のヒストグラムを表示する方法

matplotlibで、複数のヒストグラムを表示する方法を紹介します。

ヒストグラムを並べて表示する方法、重ねて表示する方法、のそれぞれの方法について、順番に紹介します。

複数のヒストグラムを並べて表示する方法

複数のヒストグラムを並べて表示する方法について紹介します。

matplotlib.pyplot.hist の引数として、リストの形でデータを指定することで、複数のヒストグラムを並べて表示できます。

以下、サンプルコードです。

### 複数のヒストグラムを表示
import numpy as np
import matplotlib.pyplot as plt

x1 = np.random.normal(0, 10, 1000)
x2 = np.random.normal(20, 20, 1000)


fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.xlabel('X')
plt.ylabel('Y')

plt.hist([x1, x2],  bins=30, range=(-50, 100), ec='black', label=['x1', 'x2'])

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist([x1, x2], bins=30, range=(-50, 100), ec='black', label=['x1', 'x2'])

ヒストグラム作成用のデータを、リストで渡しています。

複数のヒストグラムを重ねて表示する方法

複数のヒストグラムを重ねて表示する方法について紹介します。

matplotlib.pyplot.hist を重ねたいヒストグラムごとに記述することで、複数のヒストグラムを並べて表示できます。

以下、サンプルコードです。

### 複数のヒストグラムを重ねて表示
import numpy as np
import matplotlib.pyplot as plt

x1 = np.random.normal(0, 10, 1000)
x2 = np.random.normal(20, 20, 1000)


fig = plt.figure(figsize = (5,5), facecolor='lightblue')

plt.xlabel('X')
plt.ylabel('Y')

plt.hist(x1,  bins=30, range=(-50, 100), ec='black', alpha = 0.5, label='x1')
plt.hist(x2,  bins=30, range=(-50, 100), ec='black', alpha = 0.5, label='x2')

plt.show()

コード実行後、表示されるグラフはこちらになります。

実行結果

> plt.hist(x1, bins=30, range=(-50, 100), ec='black', alpha = 0.5, label='x1')
> plt.hist(x2, bins=30, range=(-50, 100), ec='black', alpha = 0.5, label='x2')

plt.histを重ねたいグラフごとに記述しています。
alphaでヒストグラムの透明度を指定しています。

スポンサーリンク

-matplotlib, ライブラリ
-,