pythonのグラフ描画ライブラリである「matplotlib」を用いて、ヒストグラムを作成する方法について紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- ヒストグラムを作成
- ヒストグラムのビン数を変更
- ヒストグラムの幅と横軸を合わせる方法(ビン数算出)
- ヒストグラムを正規化
- ヒストグラムのビンに枠線を表示
- matplotlibで複数のヒストグラムを表示
はじめに、基本的な内容として、ヒストグラムを作成する方法を紹介します。
そのあとに、ビン数の変更方法、正規化方法、複数のヒストグラムを重ねて表示する方法など、ヒストグラムを見やすく表示する方法について紹介します。
スポンサーリンク
matplotlibでヒストグラムを作成する方法
はじめに、matplotlibでヒストグラムを作成する方法を紹介します。
matplotlibには、ヒストグラムを描画するためのメソッドである、 matplotlib.pyplot.hist が用意されています。
このメソッドを使用して、ヒストグラムを作成します。
matplotlib.pyplot.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でヒストグラムの透明度を指定しています。
スポンサーリンク