更新時(shí)間:2022-09-07 來(lái)源:黑馬程序員 瀏覽量:
Matplotlib雖然已經(jīng)是比較優(yōu)秀的繪圖庫(kù)了,但是它有個(gè)今人頭疼的問(wèn)題,那就是API使用過(guò)于復(fù)雜,它里面有上千個(gè)函數(shù)和參數(shù),屬于典型的那種可以用它做任何事,卻無(wú)從下手。
Seaborn基于 Matplotlib核心庫(kù)進(jìn)行了更高級(jí)的API封裝,可以輕松地畫(huà)出更漂亮的圖形,而Seaborn的漂亮主要體現(xiàn)在配色更加舒服,以及圖形元素的樣式更加細(xì)膩。
不過(guò),使用Seaborn繪制圖表之前,需要安裝和導(dǎo)入繪圖的接口,具體代碼如下:
#安裝 pip3installseaborn
#導(dǎo)入 importseabornassns
Seaborn庫(kù)的可視化數(shù)據(jù)分布
當(dāng)處理一組數(shù)據(jù)時(shí),通常先要做的就是了解變量是如何分布的。
對(duì)于單變量的數(shù)據(jù)來(lái)說(shuō)采用直方圖或核密度曲線是個(gè)不錯(cuò)的選擇,對(duì)于雙變量來(lái)說(shuō),可采用多面板圖形展現(xiàn),比如散點(diǎn)圖、二維直方圖、核密度估計(jì)圖形等。
針對(duì)這種情況,Seaborn庫(kù)提供了對(duì)單變量和雙變量分布的繪制函數(shù),如displot()函數(shù)、jointplot()函數(shù),下面來(lái)介紹這些函數(shù)的使用。
繪制單變量分布
可以采用最簡(jiǎn)單的直方圖描述單變量的分布情況。Seaborn中提供了distplot()函數(shù),它默認(rèn)繪制的是一個(gè)帶有核密度估計(jì)曲線的直方圖。distplot()函數(shù)的語(yǔ)法格式如下。
seaborn.distplot(a,bins=None,hist=True,kde=True,rug=False,fit=None,color=None)
上述函數(shù)中常用參數(shù)的含義如下:
(1)a:表示要觀察的數(shù)據(jù),可以是Series、一維數(shù)組或列表。
(2)bins:用于控制條形的數(shù)量。
(3)hist:接收布爾類(lèi)型,表示是否繪制(標(biāo)注)直方圖。
(4)kde:接收布爾類(lèi)型,表示是否繪制高斯核密度估計(jì)曲線。
(5)rug:接收布爾類(lèi)型,表示是否在支持的軸方向上繪制rugplot。
通過(guò)distplot())函數(shù)繪制直方圖的示例如下。
importnumpyasnp sns.set() np.random.seed(0)#確定隨機(jī)數(shù)生成器的種子,如果不使用每次生成圖形不一樣 arr=np.random.randn(100)#生成隨機(jī)數(shù)組
ax=sns.distplot(arr,bins=10,hist=True,kde=True,rug=True)#繪制直方圖
上述示例中,首先導(dǎo)入了用于生成數(shù)組的numpy庫(kù),然后使用seaborn調(diào)用set()函數(shù)獲取默認(rèn)繪圖,并且調(diào)用random模塊的seed函數(shù)確定隨機(jī)數(shù)生成器的種子,保證每次產(chǎn)生的隨機(jī)數(shù)是一樣的,接著調(diào)用randn()函數(shù)生成包含100個(gè)隨機(jī)數(shù)的數(shù)組,最后調(diào)用distplot()函數(shù)繪制直方圖。
運(yùn)行結(jié)果如下圖所示。
上圖中看出:
直方圖共有10個(gè)條柱,每個(gè)條柱的顏色為藍(lán)色,并且有核密度估計(jì)曲線。
根據(jù)條柱的高度可知,位于-1-1區(qū)間的隨機(jī)數(shù)值偏多,小于-2的隨機(jī)數(shù)值偏少。
通常,采用直方圖可以比較直觀地展現(xiàn)樣本數(shù)據(jù)的分布情況,不過(guò),直方圖存在一些問(wèn)題,它會(huì)因?yàn)闂l柱數(shù)量的不同導(dǎo)致直方圖的效果有很大的差異。為了解決這個(gè)問(wèn)題,可以繪制核密度估計(jì)曲線進(jìn)行展現(xiàn)。
核密度估計(jì)是在概率論中用來(lái)估計(jì)未知的密度函數(shù),屬于非參數(shù)檢驗(yàn)方法之一,可以比較直觀地看出數(shù)據(jù)樣本本身的分布特征。
通過(guò)distplot()函數(shù)繪制核密度估計(jì)曲線的示例如下。
#創(chuàng)建包含500個(gè)位于[0,100]之間整數(shù)的隨機(jī)數(shù)組 array_random=np.random.randint(0,100,500) #繪制核密度估計(jì)曲線 sns.distplot(array_random,hist=False,rug=True)
上述示例中,首先通過(guò)random.randint()函數(shù)返回一個(gè)最小值不低于0、最大值低于100的500個(gè)隨機(jī)整數(shù)數(shù)組然后調(diào)用displot()函數(shù)繪制核密度估計(jì)曲線。 運(yùn)行結(jié)果如圖所示。
從上圖中看出,圖表中有一條核密度估計(jì)曲線,并且在x軸的上方生成了觀測(cè)數(shù)值的小細(xì)條。