簡體   English   中英

如何在matplotlib直方圖中選擇bin

[英]How to choose bins in matplotlib histogram

有人可以向我解釋直方圖中的“bins”是什么( matplotlib hist函數)? 假設我需要繪制一些數據的概率密度函數,我選擇的箱子如何影響那個? 我該如何選擇它們? (我已經在matplotlib.pyplot.histnumpy.histogram庫中讀過它們,但我沒有得到這個想法)

bins參數告訴您數據將被分成的bin數。 您可以將其指定為整數或bin邊緣列表。

例如,這里我們要20個箱子:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)
plt.hist(x, bins=20)

在此輸入圖像描述

在這里,我們要求位置[-4,-3,-2 ... 3,4]處的bin邊緣。

plt.hist(x, bins=range(-4, 5))

在此輸入圖像描述

關於如何選擇“最佳”箱數的問題是一個有趣的問題,實際上有關於這個主題的大量文獻。 已經提出了一些常用的經驗法則(例如, Freedman-Diaconis規則Sturges規則,Scott規則,平方根規則等),每個規則都有自己的優點和缺點。

如果你想要一個很好的Python實現各種這些自動調整直方圖規則,你可以在最新版本的AstroPy包中查看直方圖功能,如下所述 這就像plt.hist一樣,但是讓你使用類似的語法,比如hist(x, bins='freedman') ,通過上面提到的Freedman-Diaconis規則來選擇bin。

我個人最喜歡的是“貝葉斯塊”( bins="blocks" ),它解決了具有不相等的箱寬度的最佳裝箱。 你可以在這里閱讀更多內容。


編輯,2017年4月:使用matplotlib版本2.0或更高版本以及numpy版本1.11或更高版本,您現在可以直接在matplotlib中指定自動確定的bin,通過指定,例如bins='auto' 這使用了Sturges和Freedman-Diaconis bin的最大選擇。 您可以在numpy.histogram文檔中閱讀有關選項的更多信息。

分檔是您想要將所有數據分成的間隔數,這樣它就可以在直方圖上顯示為條形。 使用多少個分箱的簡單方法是獲取分布中值總數的平方根。

你是否正確期望箱數對近似真實的基礎分布產生重大影響。 我自己沒有讀過原始論文,但根據Scott 1979的說法,一個好的經驗法則是使用:

R(N ^(1/3))/(3.49σ)

哪里

  • R是數據范圍(在您的情況下R = 3 - ( - 3)= 6 ),

  • n是樣本數量,

  • σ是您的標准偏差。

為了補充jakes的答案 ,你可以使用numpy.histogram_bin_edges如果你只是想計算最佳的bin邊緣,而不是實際做直方圖。 histogram_bin_edges是專門為bin邊緣的最佳計算而設計的函數。 您可以為優化選擇七種不同的算法。

暫無
暫無

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

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