在matplotlib中平滑正常/高斯图

时间:2014-12-30 21:24:17

标签: python matplotlib gaussian normal-distribution

我有一个数字(浮点数)的数组。

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()

我得到的是以下内容:enter image description here

有没有办法让分发顺畅?

1 个答案:

答案 0 :(得分:1)

我尝试使用以下代码重现您的数组。 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()

导致这种可憎的行为: Bad example

一种解决方案是对数据阵列进行排序。 n是基于a的正态概率密度函数。 np.argsort会返回a的索引,您可以使用该索引对an进行排序。

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()

Better Plot.

当然 - 这不是真正意义上的smoothing。但我认为这可以解决你的问题。你也可以用标记而不是线来做一个情节:

plt.plot(a, mlab.normpdf(a, np.mean(a), np.std(a)), 'o')

这也将导致更实用的'曲线图。