2012-08-14 85 views
0

我想繪製一個對數正態分佈,所以我可以使用下面的代碼將其與我的示例數據的直方圖進行比較,但是我的繪圖看起來不正確。有沒有我的代碼,我不正確做的東西? C數組具有17576繪製一個對數正態分佈

import matplotlib.pyplot as plt 
import numpy as np 

data=np.loadtxt(F) 
C=data[:,3] 

x = np.ma.log(C) 
avg = np.mean(x) 
std = np.std(x) 
dist=lognorm(std,loc=avg) 
plt.plot(C,dist.pdf(C),'r') 
plt.show() 

My Plot

回答

2

它看起來像您的X數據是不按排序順序的長度。試試這個

ind = np.argsort(C) 
xx = C[ind] 
yy = dist.pdf(C)[ind] 
plt.plot(xx, yy, 'r') 

情節只是連接了所有的(X,Y)對用直線,所以你需要確保你從左右(或右 - 左)跟蹤你的函數。或者,您可以跳過圖之間的界限:

plt.plot(C, dist.pdf(C), 'ro') 
+0

這樣做謝謝!你能解釋爲什麼數據需要排序嗎? – Surfcast23 2012-08-14 20:12:51

+1

繪圖函數基本上在x和y數據上循環,並在'相鄰'點(其中「相鄰」指輸入數組中的位置,而不是xy平面)之間畫線。如果數據沒有排序,那麼您可以以任意方式「連接點」。另一方面,對數據進行排序,將圖中從左到右的點連接起來。這通常是你想要的正常功能 – ChrisB 2012-08-14 20:19:38

+0

啊,我不知道這是如何繪圖功能的工作。謝謝你的解釋 – Surfcast23 2012-08-14 20:56:46

相關問題