詳細的數(shù)據(jù)可視化庫之Seaborn教程—catplot:分類型數(shù)據(jù)作坐標軸畫圖

用分類數(shù)據(jù)繪圖?
在關(guān)系圖教程中,我們看到了如何使用不同的視覺表示來顯示數(shù)據(jù)集中多個變量之間的關(guān)系。在示例中,我們關(guān)注主要關(guān)系在兩個數(shù)值變量之間的情況。如果主要變量之一是“分類的”(分為離散組),則使用更專業(yè)的可視化方法可能會有所幫助。
在 seaborn 中,有幾種不同的方式來可視化涉及分類數(shù)據(jù)的關(guān)系。以之間的關(guān)系類似relplot()
,要么scatterplot()
或者lineplot()
,有兩種方法可以讓這些地塊。有許多軸級函數(shù)用于以不同方式繪制分類數(shù)據(jù),還有一個圖形級界面catplot()
,可提供對它們的統(tǒng)一更高級別訪問。
將不同的分類情節(jié)類型視為屬于三個不同的系列會很有幫助,我們將在下面詳細討論。他們是:
分類散點圖:
stripplot()
(使用kind="strip"
; 默認值)
swarmplot()
(與kind="swarm"
)
分類分布圖:
boxplot()
(與kind="box"
)
violinplot()
(與kind="violin"
)
boxenplot()
(與kind="boxen"
)
分類估計圖:
pointplot()
(與kind="point"
)barplot()
(與kind="bar"
)countplot()
(與kind="count"
)
這些系列使用不同的粒度級別表示數(shù)據(jù)。在決定使用哪個時,您必須考慮要回答的問題。統(tǒng)一的 API 使您可以輕松地在不同類型之間切換并從多個角度查看您的數(shù)據(jù)。
在本教程中,我們將主要關(guān)注圖形級界面,catplot()
. 請記住,此函數(shù)是上述每個函數(shù)的高級接口,因此我們將在顯示每種繪圖時引用它們,并保留更詳細的特定于類型的 API 文檔。
分類散點圖?
中數(shù)據(jù)的默認表示catplot()
使用散點圖。seaborn 中實際上有兩種不同的分類散點圖。他們采用不同的方法來解決用散點圖表示分類數(shù)據(jù)的主要挑戰(zhàn),即屬于一個類別的所有點將落在對應(yīng)于分類變量的軸上的相同位置。使用的方法stripplot()
,它是中的默認“種類”,catplot()
是通過少量隨機“抖動”調(diào)整分類軸上點的位置:

該jitter
參數(shù)控制抖動的幅度或完全禁用它:

第二種方法使用防止它們重疊的算法沿分類軸調(diào)整點。它可以更好地表示觀察的分布,盡管它只適用于相對較小的數(shù)據(jù)集。這種情節(jié)有時被稱為“蜂群”,是在 seaborn by 中繪制的swarmplot()
,通過設(shè)置kind="swarm"
in激活catplot()
:

與關(guān)系圖類似,可以通過使用hue
語義向分類圖添加另一個維度。(分類圖目前不支持size
或style
語義)。每個不同的分類繪圖函數(shù)以hue
不同的方式處理語義。對于散點圖,只需要改變點的顏色:

與數(shù)值數(shù)據(jù)不同,如何沿其軸對分類變量的級別進行排序并不總是很明顯。通常,seaborn 分類繪圖函數(shù)會嘗試從數(shù)據(jù)中推斷類別的順序。如果您的數(shù)據(jù)具有 pandasCategorical
數(shù)據(jù)類型,則可以在此處設(shè)置類別的默認順序。如果傳遞給分類軸的變量看起來是數(shù)字,則將對級別進行排序。但數(shù)據(jù)仍被視為分類數(shù)據(jù)并繪制在分類軸上的序數(shù)位置(特別是在 0、1、...),即使使用數(shù)字來標記它們:

選擇默認排序的另一個選項是采用出現(xiàn)在數(shù)據(jù)集中的類別級別。也可以使用order
參數(shù)在特定于繪圖的基礎(chǔ)上控制排序。在同一個圖中繪制多個分類圖時,這很重要,我們將在下面看到更多:

我們已經(jīng)提到了“分類軸”的概念。在這些示例中,它始終對應(yīng)于水平軸。但是將類別變量放在縱軸上通常會有所幫助(特別是當類別名稱比較長或類別較多時)。為此,請交換對軸的變量分配:

類別內(nèi)觀察值的分布?
隨著數(shù)據(jù)集大小的增長,分類散點圖在它們可以提供的關(guān)于每個類別中值分布的信息方面變得有限。發(fā)生這種情況時,可以采用多種方法來匯總分布信息,以便于跨類別級別進行輕松比較。
箱線圖?
第一個是熟悉的boxplot()
。這種圖顯示了分布的三個四分位數(shù)和極值?!昂殹毖由斓轿挥谙滤姆治粩?shù)和上四分位數(shù) 1.5 IQR 內(nèi)的點,然后獨立顯示超出此范圍的觀測值。這意味著箱線圖中的每個值都對應(yīng)于數(shù)據(jù)中的一個實際觀察值。

添加hue
語義時,語義變量每個級別的框沿分類軸移動,因此它們不會重疊:

這種行為被稱為“躲避”,默認情況下是打開的,因為它假定語義變量嵌套在主分類變量中。如果不是這種情況,您可以禁用閃避:

相關(guān)函數(shù)boxenplot()
繪制類似于箱線圖但經(jīng)過優(yōu)化以顯示有關(guān)分布形狀的更多信息的圖。它最適合更大的數(shù)據(jù)集:

小提琴圖?
一種不同的方法是 a?violinplot()
,它將箱線圖與分布教程中描述的核密度估計過程相結(jié)合:

這種方法使用核密度估計來提供對值分布的更豐富的描述。此外,箱線圖中的四分位數(shù)和晶須值顯示在小提琴內(nèi)部。缺點是,由于 violinplot 使用 KDE,因此可能需要調(diào)整一些其他參數(shù),相對于簡單的箱線圖增加了一些復(fù)雜性:

當色調(diào)參數(shù)只有兩個級別時,也可以“拆分”小提琴,這樣可以更有效地利用空間:
? ? ? ? ? ?kind="violin", split=True, data=tips)

最后,在小提琴內(nèi)部繪制的圖有幾個選項,包括顯示每個單獨觀察而不是匯總箱線圖值的方法:
? ? ? ? ? ?kind="violin", inner="stick", split=True,
? ? ? ? ? ?palette="pastel", data=tips)

結(jié)合swarmplot()
或striplot()
與箱線圖或小提琴圖一起顯示每個觀察結(jié)果以及分布摘要也很有用:
sns.swarmplot(x="day", y="total_bill", color="k", size=3, data=tips, ax=g.ax)

類別內(nèi)的統(tǒng)計估計?
對于其他應(yīng)用程序,您可能希望顯示值集中趨勢的估計值,而不是顯示每個類別內(nèi)的分布。Seaborn 有兩種主要方式來顯示這些信息。重要的是,這些函數(shù)的基本 API 與上面討論的那些相同。
條形圖?
實現(xiàn)這一目標的一種熟悉的情節(jié)風格是條形圖。在 seaborn 中,該barplot()
函數(shù)對完整數(shù)據(jù)集進行操作并應(yīng)用一個函數(shù)來獲得估計值(默認取平均值)。當每個類別中有多個觀測值時,它還使用自舉法計算估計值的置信區(qū)間,該區(qū)間使用誤差線繪制:
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)

條形圖的一個特例是當您想要顯示每個類別中的觀察數(shù)而不是計算第二個變量的統(tǒng)計量時。這類似于分類變量而非定量變量的直方圖。在 seaborn 中,使用countplot()
函數(shù)很容易做到這一點:

既barplot()
和countplot()
可以被調(diào)用以所有的選項上面所討論的,與他人被每個功能的詳細文檔中所示沿著:
? ? ? ? ? ?palette="pastel", edgecolor=".6",
? ? ? ? ? ?data=titanic)

點圖?
該pointplot()
函數(shù)提供了一種用于可視化相同信息的替代樣式。此函數(shù)還使用另一個軸上的高度對估計值進行編碼,但不是顯示完整的條形圖,而是繪制點估計值和置信區(qū)間。此外,pointplot()
連接來自同一hue
類別的點。這可以很容易地看出主要關(guān)系是如何作為色調(diào)語義的函數(shù)而變化的,因為你的眼睛非常擅長觀察斜率的差異:

雖然分類函數(shù)缺乏style
關(guān)系函數(shù)的語義,但改變標記和/或線型以及色調(diào)以使圖形最易于訪問并在黑白中重現(xiàn)良好仍然是一個好主意:
? ? ? ? ? ?palette={"male": "g", "female": "m"},
? ? ? ? ? ?markers=["^", "o"], linestyles=["-", "--"],
? ? ? ? ? ?kind="point", data=titanic)

繪制“寬格式”數(shù)據(jù)?
雖然首選使用“長格式”或“整潔”數(shù)據(jù),但這些函數(shù)也可以應(yīng)用于各種格式的“寬格式”數(shù)據(jù),包括 Pandas DataFrames 或二維 numpy 數(shù)組。這些對象應(yīng)該直接傳遞給data
參數(shù):
sns.catplot(data=iris, orient="h", kind="box")

此外,軸級函數(shù)接受 Pandas 或 numpy 對象的向量,而不是 a 中的變量DataFrame
:

要控制由上述函數(shù)繪制的圖形的大小和形狀,您必須使用 matplotlib 命令自己設(shè)置圖形:
sns.countplot(y="deck", data=titanic, color="c")

當您需要一個分類圖形與其他類型的圖在更復(fù)雜的圖形中愉快地共存時,這是您應(yīng)該采用的方法。
顯示多個方面的關(guān)系?
就像relplot()
,catplot()
建立在一個事實之上FacetGrid
意味著很容易添加分面變量來可視化更高維的關(guān)系:
? ? ? ? ? ?col="time", aspect=.7,
? ? ? ? ? ?kind="swarm", data=tips)

為了進一步自定義繪圖,您可以使用FacetGrid
它返回的對象上的方法:
? ? ? ? ? ? ? ?kind="box", orient="h", height=1.5, aspect=4,
? ? ? ? ? ? ? ?data=titanic.query("fare > 0"))
g.set(xscale="log")

catplot-用分類數(shù)據(jù)繪圖就為大家介紹到這里,歡迎各位同學(xué)報名《呆瓜半小時入門python數(shù)據(jù)分析》https://ke.qq.com/course/3064943,學(xué)習(xí)更多相關(guān)知識
