ヒストグラムと密度
データをヒストグラム化するときにつまづいたのでメモ。
import numpy as np import matplotlib.pyplot as plt np.random.seed(0) data = np.random.randn(1000) plt.hist(data, bins=10, color='red' , alpha=0.5) plt.hist(data, bins=30, color='blue', alpha=0.5) plt.show()
matplotlib のヒストグラムはデフォルトでは個数を表示する。このため bins の数を増やすと、ひとつの bin あたりの個数が減るため、全体の面積が減少する。これは当たり前のことで、解決するためには density=True
にする。
まあこれは当たり前なんだが、先日わけあってヒストグラムの幅をランダムにするということをしたところ、density を使わないと同じデータにも関わらず全く概形の異なるヒストグラムができてしまうことに気づいた。
import numpy as np import matplotlib.pyplot as plt np.random.seed(1) data = np.random.randn(1000) bins = np.random.random(31) * 6 - 3 bins.sort() print(bins) plt.hist(data, bins=bins, color='red' , alpha=0.5, density=True) plt.hist(data, bins=30, color='blue', alpha=0.5, density=True) plt.show()
あるデータが理論的な確率分布とどれだけ一致するかを調べる時は density を使わないといけない、というきわめて初歩的なミスを犯した。