[英]Gaussian fit to histogram is flat
我創建了一個python腳本,該腳本繪制了文件中的一行數據,然后將其與高斯曲線擬合。 紅色步進直方圖是一組數據,我希望將其平均值與真實數據值(藍色虛線)進行比較。 高斯擬合在圖的底部幾乎看不到,它是一條虛線綠色。 由於計算出的均值和sigma是正確的,所以我無法找出擬合為何平坦而不是曲線的原因。 它們是圖形的標題。
from scipy.stats import norm
import scipy, pylab
import numpy as np
import matplotlib.pyplot as plt
df = numpy.loadtxt('CR_count_TAL=0.10472.dat',dtype='str')
for num in range(1):
nu=df[num].astype('float')
data = nu[1]
mc=df[2:numpy.size(nu)]
#plot the MC distribution
#hist(nu[2:size(nu)],bins=100,color='r',range=(100,500),histtype='step')
#plot the dataline
axvline(data,color='b',linewidth=2, linestyle='--')
#fit a gaussian
#(mu, sigma) = norm.fit(nu)
plt.hist(nu[2:size(nu)],bins=100,color='r',range=(100,500),histtype='step')
y = mlab.normpdf(bins, mu, sigma)
l = plt.plot(bins, y, 'g', linewidth = 2, linestyle='--')
plt.title(r'$\ \mu=%.3f,\ \sigma=%.3f$' %(mu, sigma))
plt.show()
請在此處查看根據您的代碼改編的完整示例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
mu = 100
sigma = 20
n_sample = 3000
data = np.random.normal(mu, sigma, n_sample)
# plot the data
_, bins, _ = plt.hist(data, bins=100, color='r', range=(50, 150),
histtype='step', normed=True)
# plot the gaussian PDF
y = mlab.normpdf(bins, mu, sigma)
plt.plot(bins, y, 'g', linewidth=2, linestyle='--')
plt.axvline(mu, color='b', linewidth=2, linestyle='--')
plt.title(r'$\ \mu=%.3f,\ \sigma=%.3f$' % (mu, sigma))
plt.show()
它給這張照片
問題在於,您的y
是歸一化為1的概率分布,而您的直方圖則不是。 因此,有兩種處理方法:
歸一化基本上是直方圖曲線下的面積,可以通過數值積分來計算。 受以下因素影響
請注意, plt.hist
可以通過傳遞plt.hist
normed=True
選項來為您完成此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.