本教程對seaborn官方教程的理解性翻譯,在原教程的基礎上有適當的刪減嵌言,調整鳖昌。僅供參考交流
. 可視化數據集的分布
- 單元分布
- 雙元分布
- 可視化數據集中的pairwise relationship
1. 單元分布 sns.distplot()
-
直方圖(hist)+內核密度函數(kde)
在seaborn中最簡便查看單元分布的函數是distplot().該函數默認繪制直方圖并擬合內核密度估計询微。通過調整參數可以分別繪制直方圖角虫,擬合內核密度圖末购,地毯圖等熙揍。
x = np.random.normal(size=100)
sns.distplot(x);
-
直方圖
sns.distplot(x,kde=False) / plt.hist()
當繪制直方圖時,你需要調整的參數是bin的數目(組數)盖灸。displot()會默認給出一個它認為比較好的組數蚁鳖,但是嘗試不同的組數可能會揭示出數據不同的特征。
sns.displot(x,bins=20,kde=False,rug=True)
當繪制直方圖時赁炎,最重要的參數是
bin
以及vertical
醉箕,以確定直方圖的組數和放置位置sns.distplot(x, bins=20, kde=False, rug=True);
-
核密度估計
sns.distplot(x,hist=False) / sns.kdeplot(x)
核密度估計圖使用的較少,但其是繪制出數據分布的有用工具徙垫,與直方圖類似讥裤,KDE圖以一個軸的高度為準,沿著另外的軸線編碼觀測密度姻报。
sns.displot(x,hist=False,rug=True)
繪制KDE圖比繪制直方圖要復雜得多坞琴,每個觀測值首先要以該值為中心的正(高斯)曲線代替。然后各個點在加起來逗抑,計算支持網格點中每個點的密度值,然后將得到的曲線歸一化寒亥,使其面積小于邮府,即得到核密度估計圖
在seaborng中也有一個函數kdeplot(),使用這個函數溉奕,我們可以得到同樣的曲線褂傀,這個函數在distplot()中也被調用,但是他提供了更多更方便的借口加勤,來進行可視化調整仙辟。
sns.kdeplot(x,shae=Ture)
參數
bw
(binwidth)同直方圖的bin一樣,控制了估算與數據間的緊密程度鳄梅。與我們之前提到的內核寬度一致叠国,默認情況下,函數會直接猜一個數據戴尸,但嘗試更大或更小bw情況的粟焊,或許會更有幫助。
sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend();
使用cut參數,可以控制曲線繪制多遠的極限值项棠。然而這僅僅只是影響曲線如何繪制悲雳,并不會影響曲線本身
sns.kedplot(x,shade=True,cut=0)
sns.rugplot(x)
-
擬合參數分布
sns.distplot(x,kde=False,fit=stats,gamma)
你也可以通過使用distplot()
來擬合出一個數據集的參數分布,直觀上來評估其余觀測數據是否關系密切香追。
x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma);
2. 二元變量分布 sns.jointplot()
seaborn也能用來可視化二元變量的分布合瓢,最簡單的方法是使用jointplot()
,這個函數能夠產生一個多面板的圖像,在圖像上包括兩個變量之間的關系透典,在單獨的坐標中還繪制出了各個變量的分布晴楔。
mean,cov=[0,1],[(1,.5),(.5,1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
-
散點圖
sns.jointplot(x='x',y='y',data=df)
可視化二元分布最常見的方式是繪制散點圖。散點圖通過散點位置來代表x,y值掷匠。這和地毯圖繪制在二維上類似滥崩。你可以通過matlibplot中的plt.scatter
繪制散點圖,當然你也可以直接使用sns.jointplot
來繪制讹语。
sns.jointplot(x="x", y="y", data=df);
通過調節(jié)參數kind={scatter,hex,reg,resid,kde}可繪制不同種類的圖钙皮。
-
Hexbin圖
sns.jointplot(x=x,y=y,data=df,kind='hex')
一個直方圖的二維模擬被稱為“Hexbin”圖,因為這類圖通過六角箱顏色的深淺來表示落于六角箱類觀測值的數目顽决。因此這類圖比較適用于觀察較大的數據集短条。該圖可以使用plt.hexbin
繪制,當然也可以調參使用jointplot()
繪制才菠,當使用時最好設置為白色背景茸时,圖像效果最佳。
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')
-
核密度估計
sns.jointplot(x='x',y='y',data=df,kind='kde')
sns.kdeplot(df.x,df.y)
也可以通核密度函數來表現(xiàn)二元分布的分布赋访,在seaborn可都,這樣的圖通過等高線圖來表現(xiàn)二元分布的。
sns.jointplot(x="x", y="y", data=df, kind="kde");
sns也提供kedplot()
函數來讓你直接繪制二維核密度圖蚓耽。這樣你就可以繪制這類圖到一個特定的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ù)步悠,你可以通過增加等高線數量來完成
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對象鼎兽,你可以用他來添加更多的圖層或調整其他可視化答姥。
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.可視化成對關系sns.pairplot()
為了繪制一個數據集中多個成對的二元分布,你可以使用pairplot()
功能谚咬,該功能將創(chuàng)建矩陣鹦付,來展現(xiàn)兩兩變量間的關系。默認情況择卦,各單變量分布將繪制在對角線上睁壁。
iris=sns.load_dataset("iris")
sns.paiplot(iris)
高級圖像管理對象PairGrid
和jointplot()與JointGrid的關系一樣背苦,可以使用PairGrid對pairplot進行更多個性化設計。
g=sns.Pairgrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdig(snsn.kdeplot,cmap="Blues_d",n_levels=6)