2017-08-25 7 views
1

私はmatplotlib.pyplot.histからnormed引数で混乱していると、それはプロット出力変化しない理由:Trueの場合なぜmatplotlibヒストグラムの `normed`パラメータは何もしませんか?

を、リターンタプルの最初の要素は、確率密度を形成するために、正規化カウント になりますすなわち、n/(len(x)'dbin)、すなわち ヒストグラムの積分の合計は1になります。 stackedもTrueの場合、ヒストグラムの 合計が1

デフォルトに正規化されていること

がかなり明確に思えFalseです。私はそれは密度関数、確率密度などと呼ばれて見てきたに、[0、10]でサイズ1000のランダムな均一な分布を与えている

enter image description here

normed=Trueを指定すると、変更する必要があります

enter image description here

しかし、現実には、それは一種の何もしません:

棒の合計は1.0である密度の軸、y軸に
r = np.random.uniform(size=1000) 
plt.hist(r, normed=True) 

enter image description here

さらに:だから

print(plt.hist(r, normed=True)[0].sum()) 
# definitely not 1.0 
10.012123595 

、私は@Carstenケーニッヒのanswers同様の質問へのを見てきましたし、回避策を求めていません。私の質問は、normedの目的は何ですか?私はこのパラメータが実際に何をしているのか誤解していますか?

matplotlib documentationには、「histogram_percent_demo」という名前の例があります。ここで、積分は1000%を超えるように見えます。

答えて

1

バーの高さは、必ずしも1になるとは限りません。このように確率分布として解釈することができるヒストグラムを返し

import numpy as np 
import matplotlib.pyplot as plt 
r = np.random.uniform(size=1000) 
hist, bins, patches = plt.hist(r, normed=True) 

print((hist * np.diff(bins)).sum()) 
# 1.0 
norm=True

: それは1に等しいヒストグラムの積分と同じである曲線の下の面積です。

+1

私は直感的ではないと思います。 [wikipeadia](https://en.wikipedia.org/wiki/Histogram)には次のように記載されています。「確率密度に使用されるヒストグラムの総面積は常に1に正規化されます.x軸上の間隔の長さが1の場合、ヒストグラムは相対周波数プロットと同じです。だからあなたは相対的な周波数プロットを期待していましたが、 'norm = True'では本当に確率密度プロットです。 – ImportanceOfBeingErnest

+2

[ここ](https://stackoverflow.com/questions/45805316/gaussian-mixture-models-of-an-images-histogram)は、 'normed = True'が便利な、非常に典型的な例です。ヒストグラムと適合確率分布。ヒストグラムをノーマルにすると、2つを同じスケールで表示することができます – unutbu

関連する問題