2017年5月7日日曜日

matplotlib.pyplot.hist 関数の normed パラメータ

matplotlib.pyplot.hist 関数には、normed パラメータがある。
このパラメータの説明として「bin の頻度の合計が 1 になる」といったものが散見されるが、正確には「bin の面積が 1 になる」である。
from matplotlib import pyplot as plt

data = [1, 1, 2, 2, 2, 3, 4, 5]
n, bins, _ = plt.hist(data, bins=[1, 2, 3, 4, 5, 6], align="left", rwidth=0.8,
                      normed=True, alpha=0.5, color="red")
plt.grid(True)
plt.show()
matplotlib.pyplot.hist 関数の戻り値 3つのうち、1つ目には各 bin の値がリスト形式で格納される。この値を合計してみる。
>> print(sum(n))

1.0
この例の場合「bin の頻度の合計が 1 になる」は正しい。ここで data と bin をそれぞれ 1/10 にしてみる。
>> data = [0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.4, 0.5]
>> n, bins, _ = plt.hist(data, bins=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6], align="left", rwidth=0.8,
>>                       normed=True, alpha=0.5, color="red")
>> print(n)
>> print(sum(n))


[ 2.5   3.75  1.25  1.25  1.25]
10.0
matplotlib.pyplot.hist 関数の 2つ目の戻り値は bin の値をそのまま返す。そこで、各 bin の長さを測定する。
>> import numpy
>>
>> print(np.diff(bins))

[ 0.1  0.1  0.1  0.1  0.1]
各 bin の値に対して上で取得した長さを乗算し、bin の面積を合計する。
>> print(np.sum(n * np.diff(bins)))

1.0

0 件のコメント:

コメントを投稿