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())
調整平滑頻寬以查看更多或更少的細節
p.add(so.Area(), so.KDE(bw_adjust=0.25))
曲線將延伸到資料集中觀測值之外
p2 = p.add(so.Bars(alpha=.3), so.Hist("density")) p2.add(so.Line(), so.KDE())
使用
cut
控制密度曲線相對於觀測值的範圍p2.add(so.Line(), so.KDE(cut=0))
當觀測值被指派給
y
變數時,將顯示x
的密度so.Plot(penguins, y="flipper_length_mm").add(so.Area(), so.KDE())
使用
gridsize
增加或減少評估密度的網格的解析度p.add(so.Dots(), so.KDE(gridsize=100))
或傳遞
None
以在原始資料點處評估密度p.add(so.Dots(), so.KDE(gridsize=None))
其他變數將定義估計的分組
p.add(so.Area(), so.KDE(), color="species")
預設情況下,密度會在所有群組中進行正規化(即,顯示聯合密度);傳遞
common_norm=False
以顯示條件密度p.add(so.Area(), so.KDE(common_norm=False), color="species")
或傳遞變數列表以在其中設定條件
( p.facet("sex") .add(so.Area(), so.KDE(common_norm=["col"]), color="species") )
此統計量可以與其他轉換組合,例如
Stack
(當common_grid=True
時)p.add(so.Area(), so.KDE(), so.Stack(), color="sex")
設定
cumulative=True
以整合密度p.add(so.Line(), so.KDE(cumulative=True))