簡體   English   中英

如何對直方圖進行高斯擬合?

[英]How to Gaussian Fit Histogram?

我有一個pandas.DataFrame的形式

index     ABC       

1         -40       
2         -30       
3         -30       
4         -20       
5         -20       
6         -10       
7         -10       
8         -10      
9          0      
10         0       
11         0       
12         0       
13         10       
14         10       
15         10      
16         10      
17         20     
18         20      
19         20       
20         30       
21         40    

我想對“ABC”進行數據分析。

  1. 為“ABC”繪制直方圖。
  2. 高斯擬合直方圖。
  3. 測量半高全寬 (FWHM)。 我想按上述順序進行。 我應該怎么辦?

嘗試這個:

1.繪制直方圖

_, bins, _ = plt.hist(data, 20, density=1, alpha=0.5)

在此處輸入圖像描述

2. 高斯擬合

_, bins, _ = plt.hist(data, 20, density=1, alpha=0.5)
mu, sigma = scipy.stats.norm.fit(data)
best_fit_line = scipy.stats.norm.pdf(bins, mu, sigma)
plt.plot(bins, best_fit_line)

在此處輸入圖像描述

3. 半高寬

x = data.index.values
y = np.array(data['ABC'])

def lin_interp(x, y, i, half):
    return x[i] + (x[i+1] - x[i]) * ((half - y[i]) / (y[i+1] - y[i]))

def half_max_x(x, y):
    half = max(y)/2.0
    signs = np.sign(np.add(y, -half))
    zero_crossings = (signs[0:-2] != signs[1:-1])
    zero_crossings_i = np.where(zero_crossings)[0]
    return [lin_interp(x, y, zero_crossings_i[0], half),
            lin_interp(x, y, zero_crossings_i[1], half)]
hmx = half_max_x(x,y)
fwhm = hmx[1] - hmx[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM