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

5
我正在编写的程序的一部分需要自动生成多个原始文本来源的各种统计高斯分布,但是我在按照以下指南生成图表时遇到了一些问题: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个回答

18
如果您阅读了 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()

1
我很久以前就问过这个问题,所以它的变化并不让我感到惊讶。无论如何,感谢您的更新。 - James Paul Turner

8

看起来您犯了一些小但重要的错误。您可能选择了错误的x向量或交换了标准偏差和平均值。由于您的平均值为222,您可能希望将x向量放在该区域内,例如150到300之间。这样您就可以得到所有好东西,而现在您正在查看分布的尾部-3到3。希望这有所帮助。


0

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

mu : a numdims array of means of a

sigma : a numdims array of atandard deviation of a

这有帮助吗?


令人烦恼的是,我尝试过的所有对象类型都没有起作用...一定有比这更简单的方法。 - James Paul Turner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接