Python: 在数据的直方图上可视化正态曲线

5

非常感谢您的帮助和建议。

我正在尝试将适配的正态分布可视化到我的数据框的一列中。 到目前为止,我已经通过以下方式绘制了直方图:

df.radon_adj.hist(bins=30)

hist

我有这个“模板”,但是我遇到了错误。

请注意,此模板与高斯分布直方图相关。

import pylab as py
import numpy as np
from scipy import optimize

# Generate a 
y = df.radon_adj
data = py.hist(y, bins = 25)

# Equation for Gaussian
def f(x, a, b, c):
    return a * py.exp(-(x - b)**2.0 / (2 * c**2))

# Generate data from bins as a set of points 
x = [0.5 * (data[1][i] + data[1][i+1]) for i in xrange(len(data[1])-1)]
y = data[0]

popt, pcov = optimize.curve_fit(f, x, y)

x_fit = py.linspace(x[0], x[-1], 100)
y_fit = f(x_fit, *popt)

plot(x_fit, y_fit, lw=4, color="r")

这里需要一些示例数据-如果没有它,我们实际上无法运行您的示例代码。尝试模拟一个小的示例数据集,以便我们可以复制粘贴(np.random.randn()非常有用于生成随机数据)。 - Marius
您尝试过运行Matplotlib中的此示例吗?http://matplotlib.org/examples/statistics/histogram_demo_features.html - user2317421
我会使用Seaborn将其绘制出来。 请参考以下链接:http://stanford.edu/~mwaskom/software/seaborn/tutorial/plotting_distributions.html - biobirdman
1个回答

8
我不会重新发明轮子来定义高斯方程。可以借助scipy软件包的功能:

from scipy.stats import norm  
df = pd.DataFrame({'A': np.random.normal(size=100)})

df.A.plot(kind='hist', normed=True)

range = np.arange(-4, 4, 0.001)
plt.plot(range, norm.pdf(range,0,1))

enter image description here

需要注意的是,这里唯一的“魔法”就是确保直方图被规范化了。


6
pandas v0.23.3 版本中,normed 参数已被弃用,替代参数为 density,使用方法为 df.A.plot(kind='hist', density=True) - Talha Junaid

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