seaborn.kdeplot#

seaborn.kdeplot(data=None, *, x=None, y=None, hue=None, weights=None, palette=None, hue_order=None, hue_norm=None, color=None, fill=None, multiple='layer', common_norm=True, common_grid=False, cumulative=False, bw_method='scott', bw_adjust=1, warn_singular=True, log_scale=None, levels=10, thresh=0.05, gridsize=200, cut=3, clip=None, legend=True, cbar=False, cbar_ax=None, cbar_kws=None, ax=None, **kwargs)#

使用核密度估計繪製單變量或雙變量分佈。

核密度估計(KDE)圖是一種視覺化數據集中觀測值分佈的方法,類似於直方圖。KDE 使用一維或多維的連續機率密度曲線來表示數據。

該方法的詳細說明請參閱使用者指南

相對於直方圖,KDE 可以產生較不雜亂且更易於理解的圖表,尤其是在繪製多個分佈時。但是,如果基礎分佈是有界的或不平滑的,則可能會引入失真。與直方圖類似,表示的品質也取決於良好平滑參數的選擇。

參數:
datapandas.DataFramenumpy.ndarray、映射或序列

輸入資料結構。可以是可分配給具名變數的長格式向量集合,或將在內部重新塑形的寬格式資料集。

x, y向量或 data 中的鍵

指定 x 軸和 y 軸位置的變數。

hue向量或 data 中的鍵

映射以決定繪圖元素顏色的語意變數。

weights向量或 data 中的鍵

如果提供,則使用這些值來加權核密度估計。

palette字串、列表、字典或 matplotlib.colors.Colormap

用於選擇在映射 hue 語意時使用的顏色的方法。字串值會傳遞給 color_palette()。列表或字典值表示類別映射,而色彩對應物件表示數值映射。

hue_order字串向量

指定 hue 語意的類別層級的處理和繪圖順序。

hue_norm元組或 matplotlib.colors.Normalize

一對在資料單位中設定正規化範圍的值,或將從資料單位映射到 [0, 1] 區間的物件。使用表示數值映射。

colormatplotlib color

未使用色調映射時的單一顏色規格。否則,繪圖會嘗試連結到 matplotlib 屬性循環。

fillbool 或 None

如果為 True,則填滿單變量密度曲線下的區域,或雙變量輪廓之間的區域。如果為 None,則預設值取決於 multiple

multiple{{“layer”, “stack”, “fill”}}

當語意映射建立子集時,繪製多個元素的方法。僅與單變量資料相關。

common_normbool

如果為 True,則按觀測值的數量縮放每個條件密度,使所有密度下的總面積總和為 1。否則,獨立正規化每個密度。

common_gridbool

若為 True,則對每個核密度估計使用相同的評估網格。僅適用於單變數資料。

cumulativebool,選填

若為 True,則估計累積分布函數。需要 scipy。

bw_method字串、純量或可呼叫物件,選填

用於決定要使用的平滑頻寬的方法;傳遞給 scipy.stats.gaussian_kde

bw_adjust數字,選填

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

warn_singularbool

若為 True,當嘗試估計變異數為零的資料密度時發出警告。

log_scalebool 或數字,或成對的 bool 或數字

將軸刻度設定為對數刻度。單一值設定繪圖中任何數值軸的資料軸。成對的值獨立設定每個軸。數值會被解釋為所需的底數(預設為 10)。當 NoneFalse 時,seaborn 會延遲到現有的軸刻度。

levels整數或向量

要繪製等高線的等高線層級數量或值。向量引數必須在 [0, 1] 中具有遞增值。層級對應於密度的等比例:例如,20% 的機率質量將位於為 0.2 繪製的等高線下方。僅適用於雙變數資料。

thresh[0, 1] 中的數字

繪製等高線的最低等比例層級。當 levels 為向量時忽略。僅適用於雙變數資料。

gridsize整數

評估網格每個維度上的點數。

cut數字,選填

一個因子,乘以平滑頻寬,決定評估網格延伸超過極端資料點的距離。當設定為 0 時,在資料限制處截斷曲線。

clip成對的數字或 None,或成對的成對數字

不要在這些限制之外評估密度。

legendbool

若為 False,則抑制語意變數的圖例。

cbarbool

若為 True,則在雙變數繪圖中新增一個顏色條以註解顏色映射。注意:目前不支援具有 hue 變數的繪圖。

cbar_axmatplotlib.axes.Axes

顏色條的預先存在的軸。

cbar_kwsdict

傳遞給 matplotlib.figure.Figure.colorbar() 的其他參數。

axmatplotlib.axes.Axes

繪圖的預先存在的軸。否則,在內部呼叫 matplotlib.pyplot.gca()

kwargs

其他關鍵字引數會傳遞給下列其中一個 matplotlib 函式

回傳:
matplotlib.axes.Axes

包含繪圖的 matplotlib 軸。

另請參閱

displot

分佈繪圖函數的圖形層級介面。

histplot

繪製帶有可選正規化或平滑的箱計數直方圖。

ecdfplot

繪製經驗累積分布函數。

jointplot

繪製帶有單變數邊緣分佈的雙變數繪圖。

violinplot

使用核密度估計繪製增強的盒狀圖。

注意事項

平滑核的頻寬或標準差是一個重要的參數。頻寬的錯誤指定可能會產生資料的扭曲表示。就像直方圖中箱寬的選擇一樣,過度平滑的曲線可能會抹去分佈的真實特徵,而平滑不足的曲線可能會從隨機變異性中產生錯誤的特徵。當真實分佈平滑、單峰且大致為鐘形時,設定預設頻寬的經驗法則效果最佳。最好始終使用 bw_adjust 來增加或減少平滑量,以檢查預設行為。

由於平滑演算法使用高斯核,因此估計的密度曲線可以延伸到對於特定資料集沒有意義的值。例如,當平滑自然為正數的資料時,曲線可能會繪製在負值上。cutclip 參數可用於控制曲線的範圍,但是對於在自然邊界附近有許多觀察值的資料集,可能更適合使用不同的視覺化方法。

當資料集自然是離散的或「尖峰」(包含同一值的許多重複觀察值)時,也適用類似的考量。核密度估計始終會產生平滑曲線,在這些情況下會產生誤導。

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

範例

沿著 x 軸繪製單變數分佈

tips = sns.load_dataset("tips")
sns.kdeplot(data=tips, x="total_bill")
../_images/kdeplot_1_0.png

通過將資料變數指定給 y 軸來翻轉繪圖

sns.kdeplot(data=tips, y="total_bill")
../_images/kdeplot_3_0.png

繪製寬格式資料集中每一列的分佈

iris = sns.load_dataset("iris")
sns.kdeplot(data=iris)
../_images/kdeplot_5_0.png

使用較少的平滑

sns.kdeplot(data=tips, x="total_bill", bw_adjust=.2)
../_images/kdeplot_7_0.png

使用更多的平滑,但不要平滑超過極端資料點

ax= sns.kdeplot(data=tips, x="total_bill", bw_adjust=5, cut=0)
../_images/kdeplot_9_0.png

使用第二個變數的色調映射繪製條件分佈

sns.kdeplot(data=tips, x="total_bill", hue="time")
../_images/kdeplot_11_0.png

「堆疊」條件分佈

sns.kdeplot(data=tips, x="total_bill", hue="time", multiple="stack")
../_images/kdeplot_13_0.png

正規化網格中每個值的堆疊分佈

sns.kdeplot(data=tips, x="total_bill", hue="time", multiple="fill")
../_images/kdeplot_15_0.png

估計累積分布函數,正規化每個子集

sns.kdeplot(
    data=tips, x="total_bill", hue="time",
    cumulative=True, common_norm=False, common_grid=True,
)
../_images/kdeplot_17_0.png

使用權重從彙總資料估計分佈

tips_agg = (tips
    .groupby("size")
    .agg(total_bill=("total_bill", "mean"), n=("total_bill", "count"))
)
sns.kdeplot(data=tips_agg, x="total_bill", weights="n")
../_images/kdeplot_19_0.png

使用對數刻度映射資料變數

diamonds = sns.load_dataset("diamonds")
sns.kdeplot(data=diamonds, x="price", log_scale=True)
../_images/kdeplot_21_0.png

使用數值色調映射

sns.kdeplot(data=tips, x="total_bill", hue="size")
../_images/kdeplot_23_0.png

修改繪圖的外觀

sns.kdeplot(
   data=tips, x="total_bill", hue="size",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)
../_images/kdeplot_25_0.png

繪製雙變數分佈

geyser = sns.load_dataset("geyser")
sns.kdeplot(data=geyser, x="waiting", y="duration")
../_images/kdeplot_27_0.png

使用色調語義映射第三個變數以顯示條件分佈

sns.kdeplot(data=geyser, x="waiting", y="duration", hue="kind")
../_images/kdeplot_29_0.png

顯示填滿的等高線

sns.kdeplot(
    data=geyser, x="waiting", y="duration", hue="kind", fill=True,
)
../_images/kdeplot_31_0.png

顯示較少的等高線層級,覆蓋較少的分佈

sns.kdeplot(
    data=geyser, x="waiting", y="duration", hue="kind",
    levels=5, thresh=.2,
)
../_images/kdeplot_33_0.png

使用不同的色圖,用平滑分佈填滿軸範圍

sns.kdeplot(
    data=geyser, x="waiting", y="duration",
    fill=True, thresh=0, levels=100, cmap="mako",
)
../_images/kdeplot_35_0.png