matplotlib.mlab.normpdf()的正确用法是什么?

时间:2012-10-13 23:03:32

标签: python matplotlib distribution gaussian

我打算将我正在编写的程序的一部分自动生成多个原始文本源上的各种统计数据的高斯分布,但是我在按照以下指南生成图形时遇到了一些问题:

python pylab plot normal distribution

情节代码的一般要点如下。

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as pyplot

meanAverage = 222.89219487179491    # typical value calculated beforehand
standardDeviation = 3.8857889432054091    # typical value calculated beforehand

x = np.linspace(-3,3,100)
pyplot.plot(x,mlab.normpdf(x,meanAverage,standardDeviation))
pyplot.show()

它所做的就是产生一个相当扁平的外观和无用的y = 0线! 任何人都可以看到问题在这里吗?

干杯。

3 个答案:

答案 0 :(得分:7)

看起来你做了一些小而重要的错误。你要么选择错误的x向量,要么你交换你的stddev和意思。由于你的平均值是222,你可能想要你的x向量在这个区域,也许是150到300之间。这样你就得到了所有好东西,现在你正在看-3到3,它位于分配。希望有所帮助。

答案 1 :(得分:1)

如果您阅读了matplotlib.mlab.normpdf的文档,则此功能已被删除,您应该使用scipy.stats.norm.pdf

  

自2.2版开始不推荐使用:scipy.stats.norm.pdf

由于您的分配平均值约为222,因此您应该使用np.linspace(200, 220, 100)

所以你的代码看起来像是:

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as pyplot

meanAverage = 222.89219487179491    # typical value calculated beforehand
standardDeviation = 3.8857889432054091    # typical value calculated beforehand

x = np.linspace(200, 220, 100)
pyplot.plot(x, norm.pdf(x, meanAverage, standardDeviation))
pyplot.show()

答案 2 :(得分:0)

我看到,对于发送meanAverage,standardDeviation的*args,要发送的正确内容是:

mu : a numdims array of means of a

sigma : a numdims array of atandard deviation of a

这有帮助吗?