本教程對seaborn官方教程的理解性翻譯,在原教程的基礎(chǔ)上有適當(dāng)?shù)膭h減,調(diào)整。僅供參考交流

. 可視化數(shù)據(jù)集的分布
- 單元分布
- 雙元分布
- 可視化數(shù)據(jù)集中的pairwise relationship
1. 單元分布 sns.distplot()
-
直方圖(hist)+內(nèi)核密度函數(shù)(kde)
在seaborn中最簡便查看單元分布的函數(shù)是distplot().該函數(shù)默認(rèn)繪制直方圖并擬合內(nèi)核密度估計(jì)。通過調(diào)整參數(shù)可以分別繪制直方圖,擬合內(nèi)核密度圖,地毯圖等。
x = np.random.normal(size=100)
sns.distplot(x);

-
直方圖
sns.distplot(x,kde=False) / plt.hist()
當(dāng)繪制直方圖時(shí),你需要調(diào)整的參數(shù)是bin的數(shù)目(組數(shù))。displot()會默認(rèn)給出一個它認(rèn)為比較好的組數(shù),但是嘗試不同的組數(shù)可能會揭示出數(shù)據(jù)不同的特征。
sns.displot(x,bins=20,kde=False,rug=True)

當(dāng)繪制直方圖時(shí),最重要的參數(shù)是
bin以及vertical,以確定直方圖的組數(shù)和放置位置sns.distplot(x, bins=20, kde=False, rug=True);

-
核密度估計(jì)
sns.distplot(x,hist=False) / sns.kdeplot(x)
核密度估計(jì)圖使用的較少,但其是繪制出數(shù)據(jù)分布的有用工具,與直方圖類似,KDE圖以一個軸的高度為準(zhǔn),沿著另外的軸線編碼觀測密度。
sns.displot(x,hist=False,rug=True)

繪制KDE圖比繪制直方圖要復(fù)雜得多,每個觀測值首先要以該值為中心的正(高斯)曲線代替。然后各個點(diǎn)在加起來,計(jì)算支持網(wǎng)格點(diǎn)中每個點(diǎn)的密度值,然后將得到的曲線歸一化,使其面積小于,即得到核密度估計(jì)圖
在seaborng中也有一個函數(shù)kdeplot(),使用這個函數(shù),我們可以得到同樣的曲線,這個函數(shù)在distplot()中也被調(diào)用,但是他提供了更多更方便的借口,來進(jìn)行可視化調(diào)整。
sns.kdeplot(x,shae=Ture)

參數(shù)
bw(binwidth)同直方圖的bin一樣,控制了估算與數(shù)據(jù)間的緊密程度。與我們之前提到的內(nèi)核寬度一致,默認(rèn)情況下,函數(shù)會直接猜一個數(shù)據(jù),但嘗試更大或更小bw情況的,或許會更有幫助。
sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend();

使用cut參數(shù),可以控制曲線繪制多遠(yuǎn)的極限值。然而這僅僅只是影響曲線如何繪制,并不會影響曲線本身
sns.kedplot(x,shade=True,cut=0)
sns.rugplot(x)

-
擬合參數(shù)分布
sns.distplot(x,kde=False,fit=stats,gamma)
你也可以通過使用distplot()來擬合出一個數(shù)據(jù)集的參數(shù)分布,直觀上來評估其余觀測數(shù)據(jù)是否關(guān)系密切。
x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma);

2. 二元變量分布 sns.jointplot()
seaborn也能用來可視化二元變量的分布,最簡單的方法是使用jointplot(),這個函數(shù)能夠產(chǎn)生一個多面板的圖像,在圖像上包括兩個變量之間的關(guān)系,在單獨(dú)的坐標(biāo)中還繪制出了各個變量的分布。
mean,cov=[0,1],[(1,.5),(.5,1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
-
散點(diǎn)圖
sns.jointplot(x='x',y='y',data=df)
可視化二元分布最常見的方式是繪制散點(diǎn)圖。散點(diǎn)圖通過散點(diǎn)位置來代表x,y值。這和地毯圖繪制在二維上類似。你可以通過matlibplot中的plt.scatter繪制散點(diǎn)圖,當(dāng)然你也可以直接使用sns.jointplot來繪制。
sns.jointplot(x="x", y="y", data=df);

通過調(diào)節(jié)參數(shù)kind={scatter,hex,reg,resid,kde}可繪制不同種類的圖。
-
Hexbin圖
sns.jointplot(x=x,y=y,data=df,kind='hex')
一個直方圖的二維模擬被稱為“Hexbin”圖,因?yàn)檫@類圖通過六角箱顏色的深淺來表示落于六角箱類觀測值的數(shù)目。因此這類圖比較適用于觀察較大的數(shù)據(jù)集。該圖可以使用plt.hexbin繪制,當(dāng)然也可以調(diào)參使用jointplot()繪制,當(dāng)使用時(shí)最好設(shè)置為白色背景,圖像效果最佳。
x,y=np.random.mutivariate_normal(mean,cov,1000).T
with sns.axes_style("white")
sns.jointplot(x=x,y=y,kind="hex",color='k')

-
核密度估計(jì)
sns.jointplot(x='x',y='y',data=df,kind='kde')
sns.kdeplot(df.x,df.y)
也可以通核密度函數(shù)來表現(xiàn)二元分布的分布,在seaborn,這樣的圖通過等高線圖來表現(xiàn)二元分布的。
sns.jointplot(x="x", y="y", data=df, kind="kde");

sns也提供kedplot()函數(shù)來讓你直接繪制二維核密度圖。這樣你就可以繪制這類圖到一個特定的matplotlib軸上。
f,ax=plt.subplots(figsize(6,6))
sns.kedplot(df.x,df.y,ax=ax)
sns.rugplot9(df.x,color='g',ax=ax)
sns.rugplot(df.y,veritical=True,ax=ax)

-
sns.kedplot(df.x,df.y,n_level=60,shade=True)
如果你希望你的二維變量密度更連續(xù),你可以通過增加等高線數(shù)量來完成
f,ax=subplots(figsize=(6,6))
cmp=sns.cubehelix_palette(as_cmap=True,dark=0,light=1,reverse=True)
sns.kedplot(df.x,df.y,cmap=map,n_level=60,shade=True)

-
JointGrid 高級圖像管理對象
jointplot()使用JointGrid來管理圖形。如果你想更靈活的繪圖可以通過使用JointGrid。jointplot()在繪圖后將返回jointplot對象,你可以用他來添加更多的圖層或調(diào)整其他可視化。
g=sns.joinplot(x='x',y='y',data=df,kind='kde',color='m')
g.plot_joint(plt.scatter,c='w',s=30,linewidth=1,marker='+')
g.ax_joint.collection[0].set_alpha(0)
g.set_axis_label("$X$","$Y$")

3.可視化成對關(guān)系sns.pairplot()
為了繪制一個數(shù)據(jù)集中多個成對的二元分布,你可以使用pairplot()功能,該功能將創(chuàng)建矩陣,來展現(xiàn)兩兩變量間的關(guān)系。默認(rèn)情況,各單變量分布將繪制在對角線上。
iris=sns.load_dataset("iris")
sns.paiplot(iris)

高級圖像管理對象PairGrid
和jointplot()與JointGrid的關(guān)系一樣,可以使用PairGrid對pairplot進(jìn)行更多個性化設(shè)計(jì)。
g=sns.Pairgrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdig(snsn.kdeplot,cmap="Blues_d",n_levels=6)
