2014-11-24 81 views
2

預先感謝您提供任何幫助或提示。Python:可視化數據直方圖上的正常曲線

我試圖想象我的數據框的列之一擬合法線。到目前爲止,我已經能夠通過繪製直方圖:

df.radon_adj.hist(bins=30) 

hist

我有這個「template」,但我遇到錯誤。

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") 
+0

一些示例數據在這裏很有用 - 如果沒有它,我們無法真正運行示例代碼。嘗試模擬一個我們可以複製粘貼的小示例數據集('np.random.randn()'對於生成隨機數據非常有用)。 – Marius 2014-11-24 22:51:34

+0

你有沒有試過從Matplotlib運行這個例子? http://matplotlib.org/examples/statistics/histogram_demo_features.html – kmundnic 2014-11-24 23:19:59

+0

http://stanford.edu/~mwaskom/software/seaborn/tutorial/plotting_distributions.html我將seaborn的陰謀從它 – biobirdman 2014-11-24 23:38:45

回答

4

我不會通過定義高斯方程來重新發明輪子。站在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

注意唯一的「魔力」這裏是確保直方圖範。

+0

嗯,這個數據doesn看起來高斯... – vgoklani 2016-11-29 21:56:26