終于有人將Seaborn可視化講明白了
本文轉(zhuǎn)載自微信公眾號(hào)「數(shù)倉寶貝庫」,作者王愷 等。轉(zhuǎn)載本文請(qǐng)聯(lián)系數(shù)倉寶貝庫公眾號(hào)。
Seaborn是一種開源的數(shù)據(jù)可視化工具,它在Matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,因此可以進(jìn)行更復(fù)雜的圖形設(shè)計(jì)和輸出。Seaborn是Matplotlib的重要補(bǔ)充,可以自主設(shè)置在Matplotlib中被默認(rèn)的各種參數(shù),而且它能高度兼容NumPy與Pandas數(shù)據(jù)結(jié)構(gòu)以及Scipy與statsmodels等統(tǒng)計(jì)模式。Seaborn已集成在Anaconda中,無須再次安裝。
01關(guān)系圖
關(guān)系圖能夠直觀地展示數(shù)據(jù)變量之間的關(guān)系以及這些關(guān)系如何依賴于其他變量,Seaborn中常用的繪制數(shù)據(jù)關(guān)系圖的函數(shù)是relplot(),其語法格式如下:
- seaborn.relplot(*[, x, y, hue, size, style, data, kind, …])
參數(shù)說明如下:
- data是輸入的數(shù)據(jù)集,數(shù)據(jù)類型可以是pandas.DataFrame對(duì)象、numpy.ndarray數(shù)組、映射或序列類型等。
- x和y是參數(shù)data中的鍵或向量,指定關(guān)系圖中x軸和y軸的變量。
- hue也是data中的鍵或向量,根據(jù)hue變量對(duì)數(shù)據(jù)進(jìn)行分組,并在圖中使用不同顏色的元素加以區(qū)分。
- size也是data中的鍵或向量,根據(jù)size變量控制圖中點(diǎn)的大小或線條的粗細(xì)。
- style也是data中的鍵或向量,根據(jù)style變量對(duì)數(shù)據(jù)進(jìn)行分組,并在圖中使用不同類型的元素加以區(qū)分,比如點(diǎn)線、虛線等。
- kind指定要繪制的關(guān)系圖類型,可選"scatter"(散點(diǎn)圖)和"line"(線形圖),默認(rèn)值為"scatter"。
relplot函數(shù)提供了幾種可視化數(shù)據(jù)變量之間關(guān)系的方法,通過kind參數(shù)選擇要使用的方法,并通過hue、size和style等參數(shù)來顯示數(shù)據(jù)的不同子集。常見的關(guān)系圖有兩種,即散點(diǎn)圖和線形圖,因此Seaborn還提供了scatterplot和lineplot函數(shù),它們的語法格式如下:
- seaborn.scatterplot(*[, x, y, hue, style, size, …])
- seaborn.lineplot((*[, x, y, hue, style, size, …]))
scatterplot用于繪制散點(diǎn)圖,相當(dāng)于seaborn.relplot(kind="scatter");lineplot用于繪制線形圖,相當(dāng)于seaborn.relplot(kind="line");其他參數(shù)及含義與relplot函數(shù)相同。當(dāng)其中一個(gè)變量是連續(xù)變量時(shí),更適合使用線形圖表示變量之間的關(guān)系。
下面通過代碼清單1演示如何用Seaborn繪制關(guān)系圖。
- 代碼清單1 Seaborn繪制關(guān)系圖的示例
- 1 import matplotlib.pyplot as plt
- 2 import seaborn as sns
- 3 tips= sns.load_dataset("tips")
- 4 print(tips.head())
- 5 sns.relplot(x='total_bill', y='tip', data=tips, hue='smoker', style='sex', size='size')
- 6 plt.show()
程序執(zhí)行結(jié)束后,輸出的結(jié)果如下:
- total_bill tip sex smoker day time size
- 0 16.99 1.01 Female No Sun Dinner 2
- 1 10.34 1.66 Male No Sun Dinner 3
- 2 21.01 3.50 Male No Sun Dinner 3
- 3 23.68 3.31 Male No Sun Dinner 2
- 4 24.59 3.61 Female No Sun Dinner 4
- <seaborn.axisgrid.FacetGrid at 0x16dea2711f0>
程序繪制的關(guān)系圖如圖1所示。
圖1 Seaborn繪制散點(diǎn)關(guān)系圖示例
下面對(duì)代碼清單1中的代碼做簡(jiǎn)要說明。
- 第2行代碼導(dǎo)入seaborn模塊并將其重命名為sns。
- 第3行代碼通過sns.load_dataset()函數(shù)連網(wǎng)加載Seaborn開發(fā)者提供的在線樣本數(shù)據(jù)集“tips.csv”,返回值tips是一個(gè)DataFrame對(duì)象。
- 第4行代碼打印tips數(shù)據(jù)的前5行,以觀察數(shù)據(jù)結(jié)構(gòu)。
- 第5行代碼通過sns.relplot()函數(shù)繪制total_bill與tip變量的關(guān)系圖,如圖1所示。x坐標(biāo)為'total_bill'變量,y坐標(biāo)為'tip'變量;hue='smoker'指定以'smoker'變量對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類并以不同顏色顯示,不吸煙者對(duì)應(yīng)的數(shù)據(jù)點(diǎn)是藍(lán)色的,吸煙者對(duì)應(yīng)的數(shù)據(jù)點(diǎn)為橙色;style='sex'指定以'sex'變量對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類并以不同樣式顯示,女性對(duì)應(yīng)的數(shù)據(jù)點(diǎn)形狀是圓點(diǎn),而男性對(duì)應(yīng)的數(shù)據(jù)點(diǎn)形狀則是“×”;size='size'指定以'size'變量對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類并以不同大小顯示。從圖6-6中可以進(jìn)一步分析出不同分類中total_bill與tip的關(guān)系。
Tips
sns.load_dataset()函數(shù)是連網(wǎng)加載在線數(shù)據(jù)集,還可以在https://github.com/mwaskom/ seaborn-data網(wǎng)站中將數(shù)據(jù)集下載到本地使用。
02分布圖
分布圖可以直觀地顯示一個(gè)或多個(gè)變量在某個(gè)維度上的分布情況。Seaborn提供了幾種常用的繪制分布圖的函數(shù),包括displot()、histplot()、rdeplot()、rugplot()、distplot()和jointplot()等。
1. displot()函數(shù)
displot()函數(shù)提供了幾種可視化數(shù)據(jù)單變量或雙變量分布的方法,語法格式如下:
- seaborn.displot([data, x, y, hue, row, col, …])
主要參數(shù)說明如下:
- data是輸入的數(shù)據(jù)集,數(shù)據(jù)類型可以是pandas.DataFrame對(duì)象、numpy.ndarray數(shù)組、映射或序列類型等。
- x和y是參數(shù)data中的鍵或向量,指定分布圖中x軸和y軸的變量。
- hue是data中的鍵或向量,根據(jù)hue變量對(duì)數(shù)據(jù)進(jìn)行分組,并在圖中使用不同顏色的元素加以區(qū)分。
- row和col是data中的鍵或向量,根據(jù)row或col變量提取數(shù)據(jù)子集,并將子集分布情況繪制在不同的面板上。
- kind指定要繪制的分布圖類型,可選"hist"(直方圖)、"kde"(核密度估計(jì))、 "ecdf"(經(jīng)驗(yàn)累積分布函數(shù)),默認(rèn)值為"hist"。
displot函數(shù)通過kind參數(shù)選擇要使用的繪制數(shù)據(jù)分布情況的方法,并通過hue、row、col等參數(shù)來處理不同的數(shù)據(jù)子集。Seaborn還提供了三個(gè)更具體的繪制分布圖的函數(shù)histplot()、kdeplot()和ecdfplot(),語法格式如下:
- seaborn.histplot([data, x, y, hue, weights, stat, …])
- seaborn.kdeplot([x, y, shade, vertical, kernel, bw, …])
- seaborn.ecdfplot([data, x, y, hue, weights, stat, …])
- histplot()函數(shù)主要用于繪制單變量單特征數(shù)據(jù)的直方圖,相當(dāng)于seaborn.displot (kind= "hist")。
- kdeplot()函數(shù)使用核密度估計(jì)繪制單變量或雙變量分布,相當(dāng)于seaborn.displot (kind= "kde")。
- ecdfplot()函數(shù)使用經(jīng)驗(yàn)累積分布函數(shù)繪制單變量的分布,相當(dāng)于seaborn.displot (kind= "ecdf")。
2. rugplot()函數(shù)
rugplot()函數(shù)的功能是繪制軸須圖(毛毯分布圖),即通過邊緣軸須線的方式顯示單個(gè)觀測(cè)點(diǎn)的位置,以補(bǔ)充其他分布圖,其語法格式如下:
- seaborn.rugplot([x, height=0.025, axis, ax, data, y, hue, …])
主要參數(shù)說明如下:
x和y分別是x軸和y軸的觀測(cè)值向量。
- height設(shè)置每個(gè)觀測(cè)點(diǎn)對(duì)應(yīng)的軸須細(xì)線的高度,默認(rèn)值為0.025。
- axis指定軸須圖繪制的坐標(biāo)軸,默認(rèn)為x軸。
- ax指定將圖像繪制在已有的axes對(duì)象中。
- hue指定區(qū)分顏色的分類變量。
3. distplot()函數(shù)
distplot()函數(shù)整合了Matplotlib的hist()函數(shù)與Seaborn的kdeplot()函數(shù)的功能,并增加了rugplot()函數(shù)繪制軸須圖的功能,因此它是一個(gè)功能非常強(qiáng)大且靈活實(shí)用的繪制分布圖函數(shù),其語法格式如下:
- seaborn.distplot([a, bins, hist, kde, rug, fit, …])
主要參數(shù)說明如下:
- a是待觀察分析的單個(gè)變量,數(shù)據(jù)類型可以是Series對(duì)象、一維數(shù)組或列表。
- bins指定直方圖顯示矩形條的數(shù)量,默認(rèn)值為None,此時(shí)會(huì)根據(jù)Freedman-Diaconis準(zhǔn)則自動(dòng)計(jì)算合適的條紋個(gè)數(shù)。
- hist指定是否繪制直方圖,布爾類型,默認(rèn)值為True。
- kde指定是否繪制高斯核密度估計(jì)曲線,布爾類型,默認(rèn)值為True。
- rug指定是否在支持的數(shù)據(jù)軸上繪制對(duì)應(yīng)軸須圖,布爾類型,默認(rèn)值為False。
- fit傳入scipy.stats中的分布類型,用于在觀察變量上抽取相關(guān)統(tǒng)計(jì)特征來強(qiáng)行擬合指定的分布,并繪制估計(jì)的概率密度函數(shù)(PDF),默認(rèn)值為None,即不進(jìn)行擬合。
下面通過代碼清單2演示如何通過Seaborn繪制分布圖。
- 代碼清單2 Seaborn繪制分布圖的示例
- 1 import seaborn as sns
- 2 import matplotlib.pyplot as plt
- 3 tips= sns.load_dataset("tips")
- 4 sns.set_theme(style="whitegrid")
- 5 sns.displot(data=tips, x="total_bill", col="time", row="sex", binwidth=3, height=3, facet_kws= dict(margin_titles=True))
- 6 plt.subplots()
- 7 sns.distplot(a=tips['total_bill'], rug=True, hist=False)
- 8 plt.show()
程序執(zhí)行結(jié)束后,輸出的圖像如圖2和圖3所示。
下面對(duì)代碼清單2中的代碼做簡(jiǎn)要說明。
- 第4行代碼通過sns.set_theme()函數(shù)設(shè)置主題樣式為whitegrid,即白色背景和網(wǎng)格線。
- 第5行代碼通過sns.displot()函數(shù)繪制total_bills變量的分布圖,默認(rèn)繪圖樣式為直方圖。col="time"指定以time變量對(duì)數(shù)據(jù)分組并繪制在不同列,如圖2所示,time為Dinner的數(shù)據(jù)分布繪制在第一列,而time為L(zhǎng)unch的數(shù)據(jù)分布繪制在第二列;row="sex"指定以sex變量對(duì)數(shù)據(jù)再次分組并繪制不同行,如圖2所示,sex為Female的數(shù)據(jù)分布繪制在第一行,而sex為Male的數(shù)據(jù)分布繪制在第二行。binwidth=3指定直方圖矩形條的寬度為3;height=3指定每個(gè)子圖面板的高度為3;facet_kws = dict(margin_titles=True)設(shè)置每行對(duì)應(yīng)row變量標(biāo)簽繪制在最后一列的右側(cè)。
- 第6行代碼通過plt.subplots()函數(shù)新建一個(gè)Figure對(duì)象,用于繪制第二個(gè)圖像。
- 第7行代碼通過sns.distplot()函數(shù)繪制total_bill變量的高斯核密度估計(jì)曲線,rug=True表示要繪制對(duì)應(yīng)的軸須圖,hist=False表示不繪制直方圖,kde默認(rèn)值為True,即繪制高斯核密度估計(jì)曲線,如圖3所示。
圖2 seaborn.displot函數(shù)繪制分布圖示例
圖3 seaborn.distplot函數(shù)繪制高斯核密度估計(jì)曲線示例
4. jointplot函數(shù)
seaborn.jointplot()函數(shù)提供了幾種繪制兩個(gè)變量的聯(lián)合分布圖的方法,其語法格式如下:
- seaborn.jointplot(*[,x,y,data,kind,color,...])
主要參數(shù)說明如下:
- data是輸入的數(shù)據(jù)集,數(shù)據(jù)類型可以是pandas.DataFrame對(duì)象、numpy.ndarray數(shù)組、映射或序列類型等。
- x和y是參數(shù)data中的鍵或向量,指定分布圖中x軸和y軸的變量。聯(lián)合分布圖是雙向繪制的,即兩個(gè)變量分別以對(duì)方作為自變量繪制分布圖。
- kind指定繪制主分布圖的類型,可選擇值為"scatter"(散點(diǎn)圖)、"kde"(核密度估計(jì)曲線)、"hist"(直方圖)、"hex"(六邊形圖)、"reg"(回歸圖)或"resid"(線性回歸殘差圖),默認(rèn)值為"scatter"。
- color指定圖像中元素的顏色。
下面通過代碼清單3演示如何通過jointplot函數(shù)繪制分布圖。
- 代碼清單3 jointplot函數(shù)繪制分布圖的示例
- 1import seaborn as sns
- 2import matplotlib.pyplot as plt
- 3tips = sns.load_dataset("tips")
- 4sns.set(style="white") #設(shè)置風(fēng)格樣式
- 5sns.jointplot(x="total_bill", y="tip", data=tips)
- 6plt.show()
程序執(zhí)行結(jié)束后,輸出的圖像如圖4所示。
圖4 jointplot函數(shù)繪制聯(lián)合分布圖示例
下面對(duì)代碼清單3中的代碼做簡(jiǎn)要說明。
- 第4行代碼通過sns.set()函數(shù)設(shè)置主題樣式為white,即白色背景無網(wǎng)格。
- 第5行代碼通過sns.jointplot()函數(shù)繪制total_bill和tip變量的聯(lián)合分布圖,如圖5所示。中間的主分布圖默認(rèn)為散點(diǎn)圖,顯示total_bill和tip變量之間的關(guān)系。主圖上方對(duì)應(yīng)繪制x軸變量total_bill的直方圖,主圖右側(cè)則對(duì)應(yīng)繪制y軸變量tip的直方圖。
03分類圖
分類圖展示數(shù)據(jù)根據(jù)特定變量進(jìn)行分類后的統(tǒng)計(jì)情況。常用的分類圖包括分類散點(diǎn)圖、箱形圖、條形圖等。Seaborn的catplot()函數(shù)提供了幾種不同的分類可視化方法,以便顯示數(shù)值變量與一個(gè)或多個(gè)分類變量之間的關(guān)系,常用語法格式如下:
- seaborn.catplot(*[,x,y,hue,data,row,col,kind,...])
參數(shù)說明如下:
- data是輸入的數(shù)據(jù)集,數(shù)據(jù)類型只能是長(zhǎng)格式的pandas.DataFrame對(duì)象,即每一列對(duì)應(yīng)一個(gè)變量,每一行對(duì)應(yīng)一個(gè)觀察值。
- x和y是data數(shù)據(jù)集中的變量名,指定分類圖中x軸和y軸的變量。
- hue也是data數(shù)據(jù)集中的變量名,根據(jù)hue變量對(duì)數(shù)據(jù)進(jìn)行分組,并在圖中使用不同顏色的元素加以區(qū)分。
- row和col也是data數(shù)據(jù)集中的變量名,作為分類變量提取數(shù)據(jù)子集,并將子集分布情況繪制在不同的面板上。
- kind指定要繪制的分類圖類型,可選類型有"strip"(帶狀圖)、"swarm"(分簇散點(diǎn)圖)、"box"(箱形圖)、"violin"(小提琴圖)、"boxen"(增強(qiáng)箱形圖)、"point"(點(diǎn)估計(jì))、"bar"(條形圖)或"count"(計(jì)數(shù)條形圖),默認(rèn)值為"strip"。
catplot()函數(shù)通過kind參數(shù)選擇要使用的繪制數(shù)據(jù)分類的方法,并通過hue、row、col等參數(shù)來處理不同的數(shù)據(jù)子集。Seaborn還提供了三類更具體的繪制分類圖的函數(shù),包括分類散點(diǎn)圖、分類分布圖和分類預(yù)測(cè)圖。
1.分類散點(diǎn)圖函數(shù)
分類散點(diǎn)圖函數(shù)包括stripplot()和swarmplot(),常用的語法格式如下:
- seaborn.stripplot(*[, x, y, hue, data, order, …])
- seaborn.swarmplot(*[, x, y, hue, data, order, …])
seaborn.stripplot(*[,seaborn.swarmplot(*[,stripplot()相當(dāng)于seaborn.catplot(kind= "strip"),可以顯示測(cè)量變量在每個(gè)類別的分布情況,繪制的散點(diǎn)呈帶狀,數(shù)據(jù)較多時(shí)會(huì)有重疊的部分。
swarmplot()相當(dāng)于seaborn.catplot(kind= "swarm"),它與stripplot()類似,但繪制的數(shù)據(jù)點(diǎn)不會(huì)重疊。
2.分類分布圖函數(shù)
分類分布圖函數(shù)包括boxplot()、violinplot()和boxenplot(),常用的語法格式如下:
- seaborn.boxplot(*[, x, y, hue, data, order, …])
- seaborn.violinplot(*[, x, y, hue, data, order, …])
- seaborn.boxenplot(*[, x, y, hue, data, order, …])
- boxplot()相當(dāng)于seaborn.catplot(kind= "box"),用于繪制箱形圖以顯示與類別相關(guān)的分布情況,可以顯示四分位數(shù)、中位數(shù)和極值。
- violinplot()相當(dāng)于seaborn.catplot(kind= " violin "),結(jié)合了箱形圖和核密度估計(jì)圖。
- boxenplot()相當(dāng)于seaborn.catplot(kind= "boxen"),用于為更大的數(shù)據(jù)集繪制增強(qiáng)箱形圖。
3.分類預(yù)測(cè)圖函數(shù)
分類預(yù)測(cè)圖函數(shù)包括pointplot()、barplot()和countplot(),常用的語法格式如下:
- seaborn.pointplot(*[, x, y, hue, data, order, …])
- seaborn.barplot(*[, x, y, hue, data, order, …])
- seaborn.countplot(*[, x, y, hue, data, order, …])
- pointplot()相當(dāng)于seaborn.catplot(kind= "point"),使用散點(diǎn)圖符號(hào)顯示點(diǎn)估計(jì)和置信區(qū)間。
- barplot()相當(dāng)于seaborn.catplot(kind= "bar"),使用條形圖顯示點(diǎn)估計(jì)和置信區(qū)間。
- countplot()相當(dāng)于seaborn.catplot(kind= "count"),使用條形圖顯示每個(gè)分類中的觀察值計(jì)數(shù)。
下面通過代碼清單4演示如何通過Seaborn繪制分類圖。
- 代碼清單4 Seaborn繪制分類圖的示例
- 1 import seaborn as sns
- 2 import pandas as pd
- 3 import matplotlib.pyplot as plt
- 4 tips = sns.load_dataset("tips")
- 5 sns.set_theme(style="whitegrid")
- 6 f = sns.catplot(data=tips, kind="bar",x="day", y="total_bill", hue="smoker")
- 7 f.despine(left=True)
- 8 f.set_axis_labels("day", "total_bill")
- 9 f.legend.set_title("smoker")
- 10 plt.subplots()
- 11 sns.boxplot(x="day", y="total_bill", data=tips)
- 12 plt.show()
程序執(zhí)行結(jié)束后,輸出的圖像如圖5和圖6所示。
下面對(duì)代碼清單4中的代碼做簡(jiǎn)要說明。
- 第6行代碼通過sns.catplot()函數(shù)針對(duì)數(shù)據(jù)集tips繪制分布圖,kind="bar"指定繪制條形圖;x="day"指定x坐標(biāo)為day變量,即根據(jù)day變量對(duì)數(shù)據(jù)集進(jìn)行分類;y="total_bill"指定y坐標(biāo)為total_bill變量,即顯示total_bill變量的統(tǒng)計(jì)情況;hue="smoker"指定以smoker變量對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類并以不同顏色顯示,如圖5所示,smoker值為No的對(duì)應(yīng)數(shù)據(jù)條是藍(lán)色的,smoker值為Yes的對(duì)應(yīng)數(shù)據(jù)條是棕色的。返回值f是FacetGrid對(duì)象。
圖5 seaborn.catplot()函數(shù)繪制分類圖示例
圖6 seaborn.boxplot()函數(shù)繪制箱形圖示例
- 第7行代碼通過f.despine(left=True)設(shè)置移除f左側(cè)的y軸軸線。
- 第8~9行代碼分別設(shè)置x軸標(biāo)簽為day,y軸標(biāo)簽為total_bill,圖例標(biāo)題為smoker。
- 第10行代碼通過plt.subplots()函數(shù)新建一個(gè)Figure對(duì)象。
- 第11行代碼通過sns.boxplot()函數(shù)繪制箱形圖,同樣指定x坐標(biāo)為day變量,指定y坐標(biāo)為total_bill變量,結(jié)果如圖6所示。
04回歸圖
回歸圖是使用統(tǒng)計(jì)模型估計(jì)兩個(gè)變量間的關(guān)系。Seaborn提供了常用的繪制回歸圖的函數(shù)regplot()和lmplot()。regplot()函數(shù)的功能是繪制數(shù)據(jù)和線性回歸模型擬合的曲線,常用的語法格式如下:
- seaborn.regplot(*[, x, y, data, x_estimator, …])
主要參數(shù)說明如下:
data是輸入的數(shù)據(jù)集,數(shù)據(jù)類型是DataFrame對(duì)象,即每一列對(duì)應(yīng)一個(gè)變量,每一行對(duì)應(yīng)一個(gè)觀察值。
x和y是輸入變量,數(shù)據(jù)類型可以是字符串、Series對(duì)象或者向量數(shù)組等。如果是字符串,則與data中的列名相對(duì)應(yīng)。如果是Pandas對(duì)象,則坐標(biāo)軸被標(biāo)記為Series名稱。
lmplot()函數(shù)結(jié)合了regplot()和FacetGrid的功能,為繪制數(shù)據(jù)集的條件子集的回歸模型提供接口,語法格式如下:
- seaborn.lmplot(*[, x, y, data, hue, col, row, …])
主要參數(shù)說明如下:
- data是輸入的數(shù)據(jù)集,數(shù)據(jù)類型是DataFrame對(duì)象,即每一列對(duì)應(yīng)一個(gè)變量,每一行對(duì)應(yīng)一個(gè)觀察值。
- x和y是輸入變量,數(shù)據(jù)類型是字符串,與data中的列名相對(duì)應(yīng)。
- hue、col和row是劃分?jǐn)?shù)據(jù)子集的變量,這些子集將繪制在網(wǎng)格中的不同面板上。
regplot()和lmplot()函數(shù)密切相關(guān),兩者主要的區(qū)別是:regplot接受各種類型的x和y參數(shù),包括numpy arrays 、pandas.series 或者pandas.Dataframe對(duì)象;而lmplot()的x和y參數(shù)只接受字符串類型。
下面通過代碼清單5演示如何通過Seaborn繪制回歸圖。
- 代碼清單5 Seaborn繪制回歸圖的示例
- 1 import seaborn as sns
- 2 import matplotlib.pyplot as plt
- 3 tips = sns.load_dataset("tips")
- 4 sns.regplot(x="total_bill", y="tip", data=tips)
- 5 sns.lmplot(x="total_bill", y="tip", hue="smoker",col='sex', data=tips)
- 6 plt.show()
程序執(zhí)行結(jié)束后,輸出的圖像如圖7和圖8所示。
圖7 seaborn.regplot()函數(shù)繪制回歸圖示例
圖8 seaborn.lmplot()函數(shù)繪制回歸圖示例
下面對(duì)代碼清單5中的代碼做簡(jiǎn)要說明。
- 第4行代碼通過sns.regplot()函數(shù)繪制回歸圖,指定x坐標(biāo)為total_bill變量,指定y坐標(biāo)為tip變量,其他設(shè)置采用默認(rèn)值,結(jié)果如圖6-12所示,繪制出了total_bill和tip變量之間的線性擬合曲線,同時(shí)實(shí)際數(shù)據(jù)以散點(diǎn)的形式顯示。
- 第5行代碼通過sns.lmplot()函數(shù)在一個(gè)Facegrid對(duì)象中繪制total_bill和tip的回歸曲線;hue="smoker"指定以smoker變量對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類并以不同的顏色顯示,如圖8所示,smoker值為No的數(shù)據(jù)點(diǎn)和擬合直線是藍(lán)色的,smoker值為Yes的數(shù)據(jù)點(diǎn)和擬合直線是橙色的;col='sex'指定以sex變量對(duì)數(shù)據(jù)再次分組并繪制在不同列,如圖8所示,sex為Female的數(shù)據(jù)分布繪制在第一列,sex為Male的數(shù)據(jù)分布繪制在第二列。
05熱力圖
熱力圖是將不同的數(shù)據(jù)值用不同的標(biāo)志加以標(biāo)注的一種可視化分析手段,標(biāo)注的手段一般包括顏色的深淺、點(diǎn)的疏密以及呈現(xiàn)比重的形式。在數(shù)據(jù)分析中,如果離散數(shù)據(jù)波動(dòng)變化比較大,那么可以使用熱力圖來觀察波動(dòng)變化。
Seaborn提供的heatmap()函數(shù)可以為二維數(shù)據(jù)繪制由顏色編碼矩陣組成的熱力圖,語法格式如下:
- seaborn.heatmap(data, *[, vmin, vmax, cmap, center, …])
主要參數(shù)說明如下:
- data是輸入的二維矩形數(shù)據(jù)集,數(shù)據(jù)類型可以是DataFrame對(duì)象或二維ndarray數(shù)組等。
- vmin和vmax指定colormap的值,數(shù)據(jù)類型為float,默認(rèn)值根據(jù)數(shù)據(jù)或其他關(guān)鍵參數(shù)來決定。
- cmap指定數(shù)據(jù)值到顏色空間的映射,數(shù)據(jù)類型可以是Matplotlib colormap名稱或?qū)ο蟆㈩伾斜淼取?/li>
- center指定在繪制發(fā)散數(shù)據(jù)時(shí)顏色映射的居中值,數(shù)據(jù)類型為float。
下面通過代碼清單6演示如何通過Seaborn繪制熱力圖。
- 代碼清單6 Seaborn繪制熱力圖的示例
- 1 import numpy as np
- 2 import seaborn as sns
- 3 import matplotlib.pyplot as plt
- 4 np.random.seed(0)
- 5 uniform_data = np.random.rand(10, 12)
- 6 sns.heatmap(uniform_data)
- 7 plt.show()
程序執(zhí)行結(jié)束后,輸出的圖像如圖9所示。
圖9 seaborn.heatmap()函數(shù)繪制熱力圖示例
下面對(duì)代碼清單6中的代碼做簡(jiǎn)要說明。
- 第4~5行代碼通過numpy.random.rand函數(shù)隨機(jī)生成了10×12的二維數(shù)組uniform_data。
- 第6行代碼通過sns.heatmap()函數(shù)以熱力圖的形式展示uniform_data的數(shù)值變化。
本文摘編于《Python數(shù)據(jù)分析與應(yīng)用》,經(jīng)出版方授權(quán)發(fā)布。