我创建了一个python脚本,它从文件中绘制一行数据,然后用高斯曲线拟合它。红色步骤直方图是一组数据,其平均值我想与实际数据值(蓝色虚线)进行比较。高斯拟合在图的底部几乎看不到,它是一条绿色虚线。我无法找出为什么拟合是平的而不是曲线,因为计算的均值和西格玛是正确的;它们是图表的标题。
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()
答案 0 :(得分:4)
请在此处查看完整的工作示例,并根据您的代码进行调整
<add name ="FilterModule" type="FilterModule.AuthorizeLocal" />
它给出了这张照片
问题是您的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()
是一个概率分布,规范化为1,但您的直方图不是。因此,有两种方法可以解决它:
归一化基本上是直方图曲线下的面积,可以通过数值积分计算。受
的影响请注意,y
可以通过传递plt.hist
选项为您执行此操作。