2017-08-25 33 views
1

我被normed參數從matplotlib.pyplot.hist困惑,爲什麼它不會改變劇情輸出:爲什麼matplotlib直方圖的`normed`參數不做任何事情?

如果真,返回元組的第一個元素將被標準化,形成一個概率密度的計數 ,即n/(len(x)'dbin),即 ,積分的直方圖將總和爲1。如果stacked也是如此, 的直方圖的總和標準化爲1

默認值爲False

似乎非常清楚。我已經看到了稱爲密度函數,概率密度等

也就是說,在[0,10]中給出的尺寸1000的隨機均勻分佈:

enter image description here

指定normed=True應該改變y軸的密度軸,那裏的酒吧之和爲1.0:

enter image description here

但實際上它根本不是那麼回事:

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」的例子,其中積分看起來會超過千分之一。

回答

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

我不認爲這是不直觀的。由於[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'很有用的一個非常典型的例子 - 比較直方圖擬合概率分佈。規範直方圖允許兩個以相同的比例顯示 – unutbu

相關問題