2016-11-18 7 views
0

포인트 가우스 :피팅 반 곡선/데이터에 정상화 그래서 같은, 내가 분산 플롯에서 플롯 할 수있는 데이터의 두 개의 목록이

from matplotlib import pyplot as plt 
x = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
y = [22.4155688819,22.3936180362,22.3177538001,22.1924849792,21.7721194577,21.1590235248,20.6670446864,20.4996957642,20.4260953411,20.3595072628,20.3926201626,20.6023149681,21.1694961343,22.1077417713,23.8270366414,26.5355924353,31.3179807276,42.7871637946,61.9639549412,84.7710953311] 

plt.scatter(degrees,RMS_one_image) 

이렇게하면 가우시안과 같은 플롯을 제공합니다 좋은 결과를 얻을 수있는 배포판입니다 .- Data to plot

그러나 제 문제는 가우스 분포를이 문제에 맞추려고 노력하고 있습니다. 완전한 것 대신 절반 만 가우시안이고 b. 내가 전에 사용했던 것은 한 번에 하나의 숫자만을 사용했습니다. 따라서 다음과 같이됩니다 :

# best fit of data 
num_bins = 20 
(mu, sigma) = norm.fit(sixteen) 

y = mlab.normpdf(num_bins, mu, sigma) 

n, bins, patches = plt.hist(deg_array, num_bins, normed=1, facecolor='blue', alpha=0.5) 
# add a 'best fit' line 
y = mlab.normpdf(bins, mu, sigma) 
plt.plot(bins, y, 'r--') 

이 접근 방식은 여기서 모두 작동합니까, 아니면 완전히 잘못된 방향으로 가고 있습니까? 감사합니다 ...

+0

'norm.fit'이 무엇인지 모르기 때문에 우리는 도울 수 없습니다. 여기에 [최소한의 완전한 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 작성하십시오. – ImportanceOfBeingErnest

답변

1

당신의 일반적인 해결책은 최소 제곱합을 사용하는 대신 데이터의 예상 값과 표준 편차를 직접 찾는 것 같습니다. 다음은 scipy.optimize에서 curve_fit을 사용하는 솔루션입니다.

from matplotlib import pyplot as plt 
from scipy.optimize import curve_fit 
import numpy as np 

x = np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) 
y = [22.4155688819,22.3936180362,22.3177538001,22.1924849792,21.7721194577,21.1590235248,20.6670446864,20.4996957642,20.4260953411,20.3595072628,20.3926201626,20.6023149681,21.1694961343,22.1077417713,23.8270366414,26.5355924353,31.3179807276,42.7871637946,61.9639549412,84.7710953311] 

# Define a gaussian function with offset 
def gaussian_func(x, a, x0, sigma,c): 
    return a * np.exp(-(x-x0)**2/(2*sigma**2)) + c 

initial_guess = [1,20,2,0] 
popt, pcov = curve_fit(gaussian_func, x, y,p0=initial_guess) 

xplot = np.linspace(0,30,1000) 
plt.scatter(x,y) 
plt.plot(xplot,gaussian_func(xplot,*popt)) 

plt.show() 
+0

약간의 미세 조정 작업. 정말 고마워! :) – kb3hts