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

Jam*_*ner 2 python distribution gaussian matplotlib

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

python pylab图正态分布

绘图代码的一般要点如下.

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()
Run Code Online (Sandbox Code Playgroud)

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

干杯.

小智 14

如果您阅读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()
Run Code Online (Sandbox Code Playgroud)


dvr*_*d77 7

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