2017-09-08 4 views
-1

파일에서 데이터 행을 플롯하는 파이썬 스크립트를 작성한 후 가우스 곡선으로 맞 춥니 다. 빨간색 단계 히스토그램은 평균 데이터 값 (파란 점선)과 비교하려는 데이터 집합입니다. Gaussian fit은 그래프 아래쪽에서 거의 볼 수 없으며 점선의 녹색 선입니다. 나는 계산 된 평균과 시그마가 정확하기 때문에 왜곡이 곡선 대신 평평한지를 알 수 없다. 그것들은 그래프의 제목입니다.히스토그램에 대한 가우시안 피팅은 평평합니다

Graph

내 소스 코드

from scipy.stats import norm 
    import scipy, pylab 
    import numpy as np 
    import matplotlib.pyplot as plt 


    df = numpy.loadtxt('CR_count_TAL=0.10472.dat',dtype='str') 

    for num in range(1): 
     nu=df[num].astype('float') 
     data = nu[1] 
     mc=df[2:numpy.size(nu)] 
     #plot the MC distribution 
     #hist(nu[2:size(nu)],bins=100,color='r',range=(100,500),histtype='step') 

     #plot the dataline 
     axvline(data,color='b',linewidth=2, linestyle='--') 
     #fit a gaussian 
     #(mu, sigma) = norm.fit(nu) 
     plt.hist(nu[2:size(nu)],bins=100,color='r',range=(100,500),histtype='step') 
     y = mlab.normpdf(bins, mu, sigma) 
     l = plt.plot(bins, y, 'g', linewidth = 2, linestyle='--') 

     plt.title(r'$\ \mu=%.3f,\ \sigma=%.3f$' %(mu, sigma)) 
     plt.show() 

답변

2

여기에 전체 작업 예제를 참조하십시오, 당신의 코드에서 적응

import numpy as np                 
import matplotlib.pyplot as plt              
import matplotlib.mlab as mlab              

mu = 100                   
sigma = 20                   
n_sample = 3000                  

data = np.random.normal(mu, sigma, n_sample)          

# plot the data                
_, bins, _ = plt.hist(data, bins=100, color='r', range=(50, 150), 
         histtype='step', normed=True)                      
# plot the gaussian PDF                
y = mlab.normpdf(bins, mu, sigma)             
plt.plot(bins, y, 'g', linewidth=2, linestyle='--')         
plt.axvline(mu, color='b', linewidth=2, linestyle='--')                       
plt.title(r'$\ \mu=%.3f,\ \sigma=%.3f$' % (mu, sigma))        
plt.show() 

이이 사진

enter image description here

에게 제공

문제는 귀하의 y이 1로 정규화되지만 귀하의 히스토그램이 확률 분포가 아니라는 것입니다.

  • 스케일
  • 히스토그램

정상화 정규화 PDF 수치 적분으로 계산 될 수있는 히스토그램 곡선 아래의 영역은 기본적된다 : 따라서 취급하는 방법은 두 가지 . 그것은 샘플

  • 빈 크기 plt.histnormed=True 옵션을 전달하여 당신을 위해이 작업을 수행 할 수
    • 수에 의해 영향을 받는다.

    +0

    나는 지금까지 나는 Gaussian fit을 전혀 얻지 못했다. – Mike