【发布时间】:2017-09-16 00:21:43
【问题描述】:
对于一项作业,我被要求在直方图前绘制高斯分布的直方图。问题很简单,因为我已经知道如何在直方图上绘制高斯(以及如何绘制直方图)。
我已经有了这个:
#bins=array that indicates the boundaries of the bars
#array is an object with attributes such as; standard deviation (stdv); mean or average (mean).
In [63]: 1/(array.stdv*np.sqrt(2*np.pi))*np.exp(-(bins-array.mean)**2/(2*array.stdv**2))
Out[63]:
array([ 1.46863468e-03, 1.71347711e-03, 1.99065837e-03, ...,
5.37698408e-15, 3.25989619e-15, 1.96798911e-15])
In [64]: bins
Out[64]: array([ 33., 34., 35., ..., 187., 188., 189.])
当我尝试用这个进行绘图时,我得到:
In [59]: plt.hist(1/(array.stdv*np.sqrt(2*np.pi))*np.exp(-(bins-array.mean)**2/(2*array.stdv**2)),bins,range=(min(histmain.array),max(histmain.array)),histtype='step')
Out[59]:
(array([ 0., 0., 0., ..., 0., 0., 0.]),
array([ 33., 34., 35., ..., 187., 188., 189.]),
<a list of 1 Patch objects>)
[Figure][1]
不过,我想我已经知道问题所在了。我猜 hist 函数接收一组数据,并根据频率进行绘图。我所拥有的是一组频率。我尝试将函数乘以 3200,但得到的却是这样的暴行:
In [61]: plt.hist(3200/(array.stdv*np.sqrt(2*np.pi))*np.exp(-(bins-array.mean)**2/(2*array.stdv**2)),bins,range=(min(histmain.array),max(histmain.array)))
Out[61]:
(array([ 1., 1., 0., ..., 0., 0., 0.]),
array([ 33., 34., 35., ..., 187., 188., 189.]),
<a list of 156 Patch objects>)
[Figure][2]
以上所有数据均未显示直方图。
很抱歉。我没有注意到图像没有显示。这是他们的链接:
图 1 是平面图。图2是可怕的。我想要完成的是一个类似高斯的直方图。
【问题讨论】:
-
如果您谈论隐藏在某些输出中某处的问题,这对我们没有帮助,这显然不是您所期望的。请通过edit提出您的问题,明确说明您获得的输出不是您想要的以及您希望看到的。
-
是的,感谢您的提醒。图片未显示。
-
好吧,让我换种说法:直方图将样本数据作为输入,并计算它们在 bin 中的分布。如果样本数据来自正态分布,则直方图将具有高斯形状。您在这里所做的是将高斯形状放入直方图中。这完全没有意义,因为你没有解释你的期望,我认为这个问题应该简单地结束。
-
你在说什么“明星”?
标签: python-2.7 matplotlib histogram gaussian