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 可以產生較不雜亂且更易於理解的圖表,尤其是在繪製多個分佈時。但是,如果基礎分佈是有界的或不平滑的,則可能會引入失真。與直方圖類似,表示的品質也取決於良好平滑參數的選擇。
- 參數:
- data
pandas.DataFrame
、numpy.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] 區間的物件。使用表示數值映射。
- color
matplotlib 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)。當
None
或False
時,seaborn 會延遲到現有的軸刻度。- levels整數或向量
要繪製等高線的等高線層級數量或值。向量引數必須在 [0, 1] 中具有遞增值。層級對應於密度的等比例:例如,20% 的機率質量將位於為 0.2 繪製的等高線下方。僅適用於雙變數資料。
- thresh[0, 1] 中的數字
繪製等高線的最低等比例層級。當
levels
為向量時忽略。僅適用於雙變數資料。- gridsize整數
評估網格每個維度上的點數。
- cut數字,選填
一個因子,乘以平滑頻寬,決定評估網格延伸超過極端資料點的距離。當設定為 0 時,在資料限制處截斷曲線。
- clip成對的數字或 None,或成對的成對數字
不要在這些限制之外評估密度。
- legendbool
若為 False,則抑制語意變數的圖例。
- cbarbool
若為 True,則在雙變數繪圖中新增一個顏色條以註解顏色映射。注意:目前不支援具有
hue
變數的繪圖。- cbar_ax
matplotlib.axes.Axes
顏色條的預先存在的軸。
- cbar_kwsdict
傳遞給
matplotlib.figure.Figure.colorbar()
的其他參數。- ax
matplotlib.axes.Axes
繪圖的預先存在的軸。否則,在內部呼叫
matplotlib.pyplot.gca()
。- kwargs
其他關鍵字引數會傳遞給下列其中一個 matplotlib 函式
matplotlib.axes.Axes.plot()
(單變數,fill=False
),matplotlib.axes.Axes.fill_between()
(單變數,fill=True
),matplotlib.axes.Axes.contour()
(雙變數,fill=False
),matplotlib.axes.contourf()
(雙變數,fill=True
)。
- data
- 回傳:
matplotlib.axes.Axes
包含繪圖的 matplotlib 軸。
另請參閱
displot
分佈繪圖函數的圖形層級介面。
histplot
繪製帶有可選正規化或平滑的箱計數直方圖。
ecdfplot
繪製經驗累積分布函數。
jointplot
繪製帶有單變數邊緣分佈的雙變數繪圖。
violinplot
使用核密度估計繪製增強的盒狀圖。
注意事項
平滑核的頻寬或標準差是一個重要的參數。頻寬的錯誤指定可能會產生資料的扭曲表示。就像直方圖中箱寬的選擇一樣,過度平滑的曲線可能會抹去分佈的真實特徵,而平滑不足的曲線可能會從隨機變異性中產生錯誤的特徵。當真實分佈平滑、單峰且大致為鐘形時,設定預設頻寬的經驗法則效果最佳。最好始終使用
bw_adjust
來增加或減少平滑量,以檢查預設行為。由於平滑演算法使用高斯核,因此估計的密度曲線可以延伸到對於特定資料集沒有意義的值。例如,當平滑自然為正數的資料時,曲線可能會繪製在負值上。
cut
和clip
參數可用於控制曲線的範圍,但是對於在自然邊界附近有許多觀察值的資料集,可能更適合使用不同的視覺化方法。當資料集自然是離散的或「尖峰」(包含同一值的許多重複觀察值)時,也適用類似的考量。核密度估計始終會產生平滑曲線,在這些情況下會產生誤導。
密度軸上的單位是混淆的常見來源。雖然核密度估計產生機率分佈,但曲線在每個點的高度給出的是密度,而不是機率。只有通過在範圍內積分密度才能獲得機率。曲線經過正規化,使得所有可能值的積分為 1,這表示密度軸的刻度取決於資料值。
範例
沿著 x 軸繪製單變數分佈
tips = sns.load_dataset("tips") sns.kdeplot(data=tips, x="total_bill")
通過將資料變數指定給 y 軸來翻轉繪圖
sns.kdeplot(data=tips, y="total_bill")
繪製寬格式資料集中每一列的分佈
iris = sns.load_dataset("iris") sns.kdeplot(data=iris)
使用較少的平滑
sns.kdeplot(data=tips, x="total_bill", bw_adjust=.2)
使用更多的平滑,但不要平滑超過極端資料點
ax= sns.kdeplot(data=tips, x="total_bill", bw_adjust=5, cut=0)
使用第二個變數的色調映射繪製條件分佈
sns.kdeplot(data=tips, x="total_bill", hue="time")
「堆疊」條件分佈
sns.kdeplot(data=tips, x="total_bill", hue="time", multiple="stack")
正規化網格中每個值的堆疊分佈
sns.kdeplot(data=tips, x="total_bill", hue="time", multiple="fill")
估計累積分布函數,正規化每個子集
sns.kdeplot( data=tips, x="total_bill", hue="time", cumulative=True, common_norm=False, common_grid=True, )
使用權重從彙總資料估計分佈
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")
使用對數刻度映射資料變數
diamonds = sns.load_dataset("diamonds") sns.kdeplot(data=diamonds, x="price", log_scale=True)
使用數值色調映射
sns.kdeplot(data=tips, x="total_bill", hue="size")
修改繪圖的外觀
sns.kdeplot( data=tips, x="total_bill", hue="size", fill=True, common_norm=False, palette="crest", alpha=.5, linewidth=0, )
繪製雙變數分佈
geyser = sns.load_dataset("geyser") sns.kdeplot(data=geyser, x="waiting", y="duration")
使用色調語義映射第三個變數以顯示條件分佈
sns.kdeplot(data=geyser, x="waiting", y="duration", hue="kind")
顯示填滿的等高線
sns.kdeplot( data=geyser, x="waiting", y="duration", hue="kind", fill=True, )
顯示較少的等高線層級,覆蓋較少的分佈
sns.kdeplot( data=geyser, x="waiting", y="duration", hue="kind", levels=5, thresh=.2, )
使用不同的色圖,用平滑分佈填滿軸範圍
sns.kdeplot( data=geyser, x="waiting", y="duration", fill=True, thresh=0, levels=100, cmap="mako", )