我有一个 numpy 数字数组( float )。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
mean=np.mean(array1)
sigma=np.std(array1)
plt.plot(array1,mlab.normpdf(array1,mean,sigma))
plt.show()
我得到的是以下内容:
有没有办法平滑分布?
最佳答案
我尝试使用以下代码重现您的数组。 a
是您的数组。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
a = np.random.randn(500)*5
plt.plot(a, mlab.normpdf(a, np.mean(a), np.std(a)))
plt.show()
这导致了这种令人厌恶的事情:
一种解决方案是仅对数据数组进行排序。 n
是基于a
的正态概率密度函数。 np.argsort
返回 a
的索引,您可以使用它对 a
和 n
进行排序。
n = mlab.normpdf(a, np.mean(a), np.std(a))
ind = np.argsort(a)
a = a[ind]
n = n[ind]
plt.plot(a,n)
plt.show()
这当然不是 smoothing真正意义上的。但我认为这可以解决你的问题。您也可以只使用标记而不是线条绘制绘图:
plt.plot(a, mlab.normpdf(a, np.mean(a), np.std(a)), 'o')
这也将导致更加“实用”的情节。
关于python - 在 matplotlib 中平滑正态/高斯图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712776/