seaborn.histplot#

seaborn.histplot(data=None, *, x=None, y=None, hue=None, weights=None, stat='count', bins='auto', binwidth=None, binrange=None, discrete=None, cumulative=False, common_bins=True, common_norm=True, multiple='layer', element='bars', fill=True, shrink=1, kde=False, kde_kws=None, line_kws=None, thresh=0, pthresh=None, pmax=None, cbar=False, cbar_ax=None, cbar_kws=None, palette=None, hue_order=None, hue_norm=None, color=None, log_scale=None, legend=True, ax=None, **kwargs)#

繪製單變數或雙變數直方圖,以顯示資料集的分布。

直方圖是一種經典的視覺化工具,它通過計算落在離散區間(bin)內的觀測次數來表示一個或多個變數的分布。

此函數可以將每個區間內計算的統計量正規化,以估計頻率、密度或機率質量,並且可以添加使用核密度估計獲得的平滑曲線,類似於 kdeplot()

更多資訊請參閱使用者指南

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

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

x, y向量或 data 中的鍵

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

hue向量或 data 中的鍵

映射以確定繪圖元素顏色的語義變數。

weights向量或 data 中的鍵

如果提供,則將相應資料點對每個區間計數的貢獻,按這些因素加權。

statstr

在每個區間中計算的聚合統計量。

  • count: 顯示每個區間中的觀測次數

  • frequency: 顯示觀測次數除以區間寬度

  • probabilityproportion: 正規化,使長條圖高度總和為 1

  • percent: 正規化,使長條圖高度總和為 100

  • density: 正規化,使直方圖總面積等於 1

binsstr、數字、向量或此類值的配對

一般區間參數,可以是參考規則的名稱、區間數或區間的中斷點。傳遞至 numpy.histogram_bin_edges()

binwidth數字或數字配對

每個區間的寬度,會覆寫 bins,但可與 binrange 一起使用。

binrange數字配對或配對的配對

區間邊緣的最低值和最高值;可與 binsbinwidth 一起使用。預設為資料極值。

discretebool

如果為 True,則預設為 binwidth=1,並繪製長條圖,使其在對應的資料點上居中。這可以避免在使用離散(整數)資料時可能出現的「間隙」。

cumulativebool

如果為 True,則隨著區間增加,繪製累積計數。

common_binsbool

如果為 True,當語義變數產生多個圖表時,會使用相同的 bin。如果使用參考規則來決定 bin,則將使用完整資料集進行計算。

common_normbool

如果為 True 且使用標準化統計數據,則標準化將應用於完整資料集。否則,將獨立標準化每個直方圖。

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

當語義映射建立子集時,解決多個元素的方法。僅適用於單變量資料。

element{“bars”, “step”, “poly”}

直方圖統計數據的視覺表示。僅適用於單變量資料。

fillbool

如果為 True,則填充直方圖下的空間。僅適用於單變量資料。

shrinknumber

相對於 binwidth,以此因子縮放每個條形的寬度。僅適用於單變量資料。

kdebool

如果為 True,則計算核密度估計以平滑分佈,並在圖表上顯示為(一個或多個)線條。僅適用於單變量資料。

kde_kwsdict

控制 KDE 計算的參數,如同 kdeplot()

line_kwsdict

控制 KDE 可視化的參數,傳遞給 matplotlib.axes.Axes.plot()

threshnumber 或 None

統計數據小於或等於此值的儲存格將為透明。僅適用於雙變量資料。

pthreshnumber 或 None

thresh 類似,但值在 [0, 1] 之間,使得累計計數(或使用時的其他統計數據)達到總數此比例的儲存格將為透明。

pmaxnumber 或 None

在 [0, 1] 之間的值,用於設置色彩映射的飽和點,使得低於該值的儲存格構成總計數(或使用時的其他統計數據)的此比例。

cbarbool

如果為 True,則添加色彩條以註解雙變量圖表中的色彩映射。注意:目前不支援具有 hue 變數的圖表。

cbar_axmatplotlib.axes.Axes

色彩條的預先存在的軸。

cbar_kwsdict

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

palettestring, list, dict, 或 matplotlib.colors.Colormap

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

hue_order字串向量

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

hue_norm元組或 matplotlib.colors.Normalize

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

colormatplotlib color

當不使用色調映射時的單一顏色規格。否則,繪圖將嘗試掛接到 matplotlib 屬性循環。

log_scalebool 或數字,或一對 bool 或數字

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

legendbool

如果為 False,則抑制語義變數的圖例。

axmatplotlib.axes.Axes

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

kwargs

其他關鍵字引數會傳遞給以下 matplotlib 函數之一

返回:
matplotlib.axes.Axes

包含圖表的 matplotlib 軸。

另請參閱

displot

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

kdeplot

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

rugplot

沿著 x 軸和/或 y 軸在每個觀測值處繪製刻度。

ecdfplot

繪製經驗累積分佈函數。

jointplot

繪製具有單變量邊際分佈的雙變量圖表。

注意事項

用於計算和繪製直方圖的 bin 選擇可能會對從視覺化中獲得的見解產生重大影響。如果 bin 太大,可能會抹除重要的特徵。另一方面,如果 bin 太小,則可能會被隨機變異性主導,從而模糊真實底層分佈的形狀。預設 bin 大小是使用取決於樣本大小和變異數的參考規則來確定的。這在許多情況下(即,對於「行為良好」的資料)都有效,但在其他情況下會失敗。始終最好嘗試不同的 bin 大小,以確保您不會錯過任何重要資訊。此函數允許您以多種不同的方式指定 bin,例如設定要使用的 bin 總數、每個 bin 的寬度或 bin 應分割的特定位置。

範例

將變數指派給 x 以沿 x 軸繪製單變量分佈

penguins = sns.load_dataset("penguins")
sns.histplot(data=penguins, x="flipper_length_mm")
../_images/histplot_1_0.png

透過將資料變數指派給 y 軸來翻轉圖表

sns.histplot(data=penguins, y="flipper_length_mm")
../_images/histplot_3_0.png

透過指定不同的 bin 寬度來檢查直方圖如何表示資料

sns.histplot(data=penguins, x="flipper_length_mm", binwidth=3)
../_images/histplot_5_0.png

您也可以定義要使用的 bin 總數

sns.histplot(data=penguins, x="flipper_length_mm", bins=30)
../_images/histplot_7_0.png

新增核密度估計以平滑直方圖,提供有關分佈形狀的補充資訊

sns.histplot(data=penguins, x="flipper_length_mm", kde=True)
../_images/histplot_9_0.png

如果未指派 xy,則資料集會被視為寬格式,並且會為每個數值欄位繪製直方圖

sns.histplot(data=penguins)
../_images/histplot_11_0.png

否則,您可以從具有色調映射的長格式資料集中繪製多個直方圖

sns.histplot(data=penguins, x="flipper_length_mm", hue="species")
../_images/histplot_13_0.png

繪製多個分佈的預設方法是「分層」它們,但您也可以「堆疊」它們

sns.histplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")
../_images/histplot_15_0.png

重疊的條形可能難以視覺解析。不同的方法是繪製階躍函數

sns.histplot(penguins, x="flipper_length_mm", hue="species", element="step")
../_images/histplot_17_0.png

您可以透過在每個 bin 的中心繪製頂點的多邊形來進一步遠離條形。這可能會讓您更容易看到分佈的形狀,但請謹慎使用:您的觀眾將不太清楚他們正在看直方圖

sns.histplot(penguins, x="flipper_length_mm", hue="species", element="poly")
../_images/histplot_19_0.png

若要比較大小差異很大的子集分佈,請使用獨立的密度標準化

sns.histplot(
    penguins, x="bill_length_mm", hue="island", element="step",
    stat="density", common_norm=False,
)
../_images/histplot_21_0.png

也可以標準化,使每個條形的高度顯示機率、比例或百分比,這對於離散變數更有意義

tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="size", stat="percent", discrete=True)
../_images/histplot_23_0.png

您甚至可以繪製類別變數的直方圖(儘管這是一個實驗性功能)

sns.histplot(data=tips, x="day", shrink=.8)
../_images/histplot_25_0.png

當使用帶有離散數據的 hue 語意時,將各層級「錯開」顯示可能較為合理。

sns.histplot(data=tips, x="day", hue="sex", multiple="dodge", shrink=.8)
../_images/histplot_27_0.png

真實世界的數據通常會呈現偏斜。對於嚴重偏斜的分布,最好在對數空間中定義分組。請比較

planets = sns.load_dataset("planets")
sns.histplot(data=planets, x="distance")
../_images/histplot_29_0.png

與對數刻度版本的比較

sns.histplot(data=planets, x="distance", log_scale=True)
../_images/histplot_31_0.png

長條圖的呈現方式也有多種選項。您可以顯示未填滿的長條

sns.histplot(data=planets, x="distance", log_scale=True, fill=False)
../_images/histplot_33_0.png

或者未填滿的階梯函數

sns.histplot(data=planets, x="distance", log_scale=True, element="step", fill=False)
../_images/histplot_35_0.png

階梯函數,尤其是在未填滿的情況下,可以輕鬆比較累積長條圖

sns.histplot(
    data=planets, x="distance", hue="method",
    hue_order=["Radial Velocity", "Transit"],
    log_scale=True, element="step", fill=False,
    cumulative=True, stat="density", common_norm=False,
)
../_images/histplot_37_0.png

當同時指定 xy 時,將計算雙變數直方圖並顯示為熱圖

sns.histplot(penguins, x="bill_depth_mm", y="body_mass_g")
../_images/histplot_39_0.png

也可以指定 hue 變數,但如果來自不同層級的數據有大量重疊,則效果不佳

sns.histplot(penguins, x="bill_depth_mm", y="body_mass_g", hue="species")
../_images/histplot_41_0.png

當其中一個變數為離散型時,使用多個顏色地圖可能較為合理

sns.histplot(
    penguins, x="bill_depth_mm", y="species", hue="species", legend=False
)
../_images/histplot_43_0.png

雙變數直方圖接受與單變數直方圖相同的計算選項,使用元組來獨立參數化 xy

sns.histplot(
    planets, x="year", y="distance",
    bins=30, discrete=(True, False), log_scale=(False, True),
)
../_images/histplot_45_0.png

預設行為會使沒有觀測值的儲存格透明,雖然此設定可以停用

sns.histplot(
    planets, x="year", y="distance",
    bins=30, discrete=(True, False), log_scale=(False, True),
    thresh=None,
)
../_images/histplot_47_0.png

也可以根據累積計數的比例來設定閾值和色彩映射飽和點

sns.histplot(
    planets, x="year", y="distance",
    bins=30, discrete=(True, False), log_scale=(False, True),
    pthresh=.05, pmax=.9,
)
../_images/histplot_49_0.png

若要註解色彩映射,請加入色條

sns.histplot(
    planets, x="year", y="distance",
    bins=30, discrete=(True, False), log_scale=(False, True),
    cbar=True, cbar_kws=dict(shrink=.75),
)
../_images/histplot_51_0.png