python histogram的畫圖歸一化


def get_CDF(numList):
	print "total number of numList %d"%len(numList)
	numArray = np.asarray(numList)
	dx = .01
	bins_array = np.arange(-0.5,1.5,dx)
	
	hist, bin_edges = np.histogram(numArray, bins=bins_array, normed=False)
	cdf = np.cumsum(hist)
	cdf = cdf/float(hist.sum())
	
	bins_list = bins_array[1:]
	return (bins_list, cdf)

  折騰了好久,之前寫寫了個畫histogram圖的代碼,但是發現如果要畫兩個list的話,會出現問題,他們的下標沒法統一,而且之前的代碼也還有個問題,解釋如果list中的元素都是0-1之間小數的話,極容易出現上下取整,變為1,0,然后畫圖出來的效果就不是歸一化了。

http://stackoverflow.com/questions/9378420/how-to-plot-cdf-in-matplotlib-in-python這個解答算是啟發我如何解決問題的。謝謝他。

  今天在要畫兩個圖的情況下,自己找了不少資料,最后整理出來了一個。記錄下。

  有幾個問題需要注意

1.cdf/float(hist.sum())這里一定要float不然的話,出來的就都是0了,因為本來這里求的就是頻數的小數,如果不加float,就變為0了。

2.bins_list = bins_array[1:] 這里需要從1開始取,因為經過cumsum之后,會少了一個元素,這是因為第一個元素之前的值為0,自動省掉了。另外bins_array可以用來直接轉換為array。這點還挺意外的。這個少了一個數的,可以參考這個回答http://stackoverflow.com/questions/15697350/binning-frequency-distribution-in-python

3.histogram,normed我這里設置的是false,因為我設置為true的時候,統計的是概率,一直不對勁,我也沒搞懂他的概率是怎么算的。false的話就是頻數。有誰明白true的時候怎么算的麻煩告知我一聲。謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM