seaborn.objects.KDE#

class seaborn.objects.KDE(bw_adjust=1, bw_method='scott', common_norm=True, common_grid=True, gridsize=200, cut=3, cumulative=False)#

計算單變量核密度估計。

參數:
bw_adjustfloat

一個乘法縮放因子,用於調整使用 bw_method 選擇的值。增加這個值會使曲線更平滑。請參閱「注意事項」。

bw_methodstring、純量或可呼叫物件

用於確定要使用的平滑頻寬的方法。直接傳遞給 scipy.stats.gaussian_kde;請參閱那裡的選項。

common_normbool 或變數列表

如果為 True,則進行正規化,使所有曲線的面積總和為 1。如果為 False,則對每條曲線進行獨立的正規化。如果為列表,則定義要分組並在其中正規化的變數。

common_gridbool 或變數列表

如果為 True,則所有曲線將共用相同的評估網格。如果為 False,則每個評估網格都是獨立的。如果為列表,則定義要分組並在其中共用網格的變數。

gridsizeint 或 None

評估網格中的點數。如果為 None,則在原始資料點處評估密度。

cutfloat

一個因子,乘以核頻寬,用於決定評估網格超出極端資料點的距離。設定為 0 時,曲線會在資料邊界處截斷。

cumulativebool

如果為 True,則估計累積分佈函數。需要 scipy。

注意事項

頻寬或平滑核的標準差是一個重要的參數。與長條圖的組距寬度非常相似,使用錯誤的頻寬可能會產生扭曲的表示。過度平滑可能會抹除真實的特徵,而平滑不足可能會產生虛假的特徵。預設值使用一種經驗法則,對於大致呈鐘形的分布效果最佳。最好通過更改 bw_adjust 來檢查預設值。

由於平滑是使用高斯核執行的,因此估計的密度曲線可以延伸到可能沒有意義的值。例如,當資料本質上為正數時,曲線可能會繪製在負值上。cut 參數可用於控制評估範圍,但是對於在自然邊界附近有很多觀測值的資料集,最好使用不同的方法。

當資料集本質上是離散的或「尖峰狀」(包含許多相同值的重複觀測值)時,可能會出現類似的扭曲。KDE 將始終產生平滑的曲線,這可能會產生誤導。

密度軸上的單位是造成混淆的常見原因。雖然核密度估計產生機率分佈,但曲線在每個點的高度給出密度,而不是機率。只有通過整合某個範圍內的密度才能獲得機率。對曲線進行正規化,使所有可能值的積分為 1,這表示密度軸的尺度取決於資料值。

如果已安裝 scipy,將使用其 cython 加速的實作。

範例

此統計量估計將觀測值轉換為表示估計密度的平滑函數

p = so.Plot(penguins, x="flipper_length_mm")
p.add(so.Area(), so.KDE())
../_images/objects.KDE_1_0.png

調整平滑頻寬以查看更多或更少的細節

p.add(so.Area(), so.KDE(bw_adjust=0.25))
../_images/objects.KDE_3_0.png

曲線將延伸到資料集中觀測值之外

p2 = p.add(so.Bars(alpha=.3), so.Hist("density"))
p2.add(so.Line(), so.KDE())
../_images/objects.KDE_5_0.png

使用 cut 控制密度曲線相對於觀測值的範圍

p2.add(so.Line(), so.KDE(cut=0))
../_images/objects.KDE_7_0.png

當觀測值被指派給 y 變數時,將顯示 x 的密度

so.Plot(penguins, y="flipper_length_mm").add(so.Area(), so.KDE())
../_images/objects.KDE_9_0.png

使用 gridsize 增加或減少評估密度的網格的解析度

p.add(so.Dots(), so.KDE(gridsize=100))
../_images/objects.KDE_11_0.png

或傳遞 None 以在原始資料點處評估密度

p.add(so.Dots(), so.KDE(gridsize=None))
../_images/objects.KDE_13_0.png

其他變數將定義估計的分組

p.add(so.Area(), so.KDE(), color="species")
../_images/objects.KDE_15_0.png

預設情況下,密度會在所有群組中進行正規化(即,顯示聯合密度);傳遞 common_norm=False 以顯示條件密度

p.add(so.Area(), so.KDE(common_norm=False), color="species")
../_images/objects.KDE_17_0.png

或傳遞變數列表以在其中設定條件

(
    p.facet("sex")
    .add(so.Area(), so.KDE(common_norm=["col"]), color="species")
)
../_images/objects.KDE_19_0.png

此統計量可以與其他轉換組合,例如 Stack(當 common_grid=True 時)

p.add(so.Area(), so.KDE(), so.Stack(), color="sex")
../_images/objects.KDE_21_0.png

設定 cumulative=True 以整合密度

p.add(so.Line(), so.KDE(cumulative=True))
../_images/objects.KDE_23_0.png