Seaborn中的kdeplot、rugplot、distplot與jointplot


一、seaborn介紹

  seaborn是python中基於Matplotlib包具有更多可視化效果和更多風格的可視化模塊,可以說是Matplotlib的封裝。當我們想要探索單個或者一對數據分布上的特征時,可以使用seaborn中內置的若干函數對數據的分布進行多種多樣的可視化。

二、kdeplot

  對於單變量和雙變量進行核密度估計,並可視化,參數表如下:

kdeplot參數表
參數 說明
data 一維數組,單變量時作為唯一的量
data2 格式同data,單變量時不輸入,雙變量是作為第2個輸入變量
shade bool型,是否對核密度估計曲線下的面積進行色彩填充,默認為False
vertical bool型,是否顛倒x-y軸位置(單變量輸入時有效)
kernel 字符型,核密度估計的方法,默認為‘gau’,即高斯核,且在2維變量的情況下僅支持高斯核方法
legend bool型,是否在圖像上添加圖例
cumulative bool型,是否繪制核密度密度估計的累計分布,默認為False
shade_lowest

bool型,是否為核密度估計中最低的范圍着色,主要用於在同一個坐標軸中比較多個不同分布總體,默認為True

cbar

bool型,是否在繪制二維核密度估計圖時在圖像右側添加比色卡
color 字符型,控制核密度曲線的色彩,plt.plot()中的color參數
cmap 字符型,核密度區域的遞進色彩方案,同plt.plot()中的cmap參數,如'Blues'代表藍色系
n_levels int型,控制核密度區間的個數,反映在圖像上的閉環層數

 

 

 

 

 

 

 

 

 

 

 

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(color_codes = True)
%matplotlib inline
mean = [0,2]
cov = [(1,0.5),(0.5,1)]
x,y = np.random.multivariate_normal(mean,cov,50).T

 numpy.random.multivariate_normal()函數解析

1、不修改其他參數只傳入數據,繪制

#單變量
ax = sns.kdeplot(x)

2、加入紅的填充區域並添加圖例

# ax = sns.kdeplot(x,shade = True,color='r',legend=True)
ax = sns.kdeplot(x,shade=True,label='x')

3、修改為核密度估計的累計分布

ax = sns.kdeplot(x,shade=True,color='r',cumulative=True)

4、交換x-y軸位置

ax = sns.kdeplot(x,shade = True,color='r',vertical = True)

5、繪制雙變量聯合密度估計圖 

ax = sns.kdeplot(x,y)

 

 6、修改調色方案,並設置shade_lowest = True、陰影填充及核密度區間個數

ax = sns.kdeplot(x,y,cmap='Blues',shade = True,shade_lowest=True)
ax = sns.kdeplot(x,y,cmap='Blues',shade = True,shade_lowest=True,n_levels=5)

 7、在同一個子圖中繪制兩個不同一維總體的核密度估計圖

ax1 = sns.kdeplot(x,label='x',shade = True,color='r')
ax2 = sns.kdeplot(y,label='y',shade = True,color='y')

 

8、在同一個子圖中繪制兩個不同二維總體的核密度估計圖

mean1 = [-1,1]
cov1 = [(0,0.3),(0.3,0.1)]
x1,y1 = np.random.multivariate_normal(mean1,cov1,30).T

ax1 = sns.kdeplot(x,y,cmap='Reds',shade=True,shade_lowest=False)
ax2 = sns.kdeplot(x1,y1,cmap='Greens',shade=True,shade_lowest=False)

三、rugplot

  用於繪制出一維數組中數據點實際的分布位置情況,即不添加任何數學意義上的擬合,只是單純的記錄值在坐標軸上進行展示,相當於kdeplot,可以展示出數據的離散分布情況。參數表如下:

rugplot參數表
參數 說明
a 一維數組,傳入觀測值向量 
height  設置每個觀測點對應的小短條的高度,默認為0.05
axis  字符型變量,觀測值對應小短條所在的軸,默認為'x',即x軸

 

 

 

 

 

1、使用默認參數進行繪制

ax = sns.rugplot(x)

 

 2、調換小短條所處的坐標軸並修改其高度與顏色

ax = sns.rugplot(x,axis='y',height = 0.3,color='y')

 

四、displot

  displot主要功能是繪制單變量的直方圖,而且可以在直方圖的基礎之上加上kdeplot和rugplot的部分內容,其功能非常強大,其主要參數如下:

displot參數表
參數 說明
a 以為數組形式,傳入帶分析的變量
bins int型變量,確定直方圖中限制直方的數量,默認為None
hist bool型,是描繪制直方圖,默認為True
kde bool型,是否繪制核密度估計曲線,默認為True
rug bool型,是否繪制對應的rugplot部分,默認為False
fit 傳入scipy_stats中的分布類型,用於觀察變量上抽取相關統計特征來強行擬合的分布,默認為None,即不進行擬合

hist_kws

字典形式的輸入,對應hist原生函數中的參數名稱與參數值
kde_kws 同上
rug_kws 同上
color 控制除了fit部分擬合出的曲線之外的所有對象的色彩
vertical bool型,是否顛倒x-y軸,默認為False
norm_hist

bool型,表示直方圖高度代表的意義,默認為False

True:直方圖高度表示對應的密度

False:對應的直方區間內記錄值個數

label 控制圖像中的圖例標簽顯示內容

 

 

 

 

 

 

 

 

 

 

 

 

1、使用默認參數進行繪制

import pandas as pd
x = pd.Series(x,name = 'x')
ax = sns.distplot(x)

2、修改所有對象顏色,繪制rugplot部分,並修改bins

ax = sns.distplot(x,color='r',rug=True,bins=20)

 

3、強行擬合卡方分布並利用參數字典設置fit曲線顏色 

ax = sns.distplot(x,color='r',rug=True,bins=20,kde=False,fit=None,
                  norm_hist=False,hist_kws={'alpha':0.6,'color':'orange'},
                  rug_kws={'color':'g'})

 4、修改norm_hist參數為False使得縱軸顯示的不再是密度而是頻數(注意這里必須關閉kde和fit繪圖的部分,否則縱軸依然顯示密度),利用hist_kws傳入字典調整直方圖部分色彩和透明度,利用rug_kws傳入字典調整rugplot部分小短條色彩:

 

五、jointplot

  jointplot中聚合了kdeplot和rugplot中的相關內容,故放於最后進行介紹;

  jointplot主要用於對成對變量的相關情況聯合分布各自的分布呈現於一張圖表,jointplot的主要參數如下:

jointplot參數表
參數 說明
x,y

代表待分析的成對變量,有兩種模式;

第一種模式:在參數data傳入數據框時,x、y均傳入字符串,指代數據框中的變量名;

第二種模式:在參數data為None時,x、y直接傳入兩個一維數組,不依賴數據框

data 與上一段中的說明相對應,代表數據框,默認為None
kind 字符型,展示成對變量相關情況的主圖中的樣式
color 圖像中對象的色彩
height 圖像為正方形時的邊長
ratio int型,調節聯合圖與邊緣圖的相對比例,越大則邊緣圖越矮,默認為5
space int型,用於控制聯合圖與邊緣圖的空白大小
xlim,ylim 設置x軸與y軸顯示范圍

joint_kws,

marginal_kws,

annot_kws

傳入參數字典來分別精細化控制每個組件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1、使用默認參數繪制成對變量聯合圖

  模式一:在參數data傳入數據框時,x、y均傳入字符串,指代數據框中的變量名

data = pd.DataFrame()
data['x']=x
data['y']=y
ax = sns.jointplot(x='x',y='y',data=data)

  模式二:在參數data為None時,x、y直接傳入兩個一維數組,不依賴數據框

y = pd.Series(y,name='y')
ax = sns.jointplot(x=x,y=y)

2、將kind參數設置為‘reg’,為聯合圖添加線性回歸擬合直線與核密度估計結果

y = pd.Series(y,name='y')
ax = sns.jointplot(x=x,y=y,kind='reg')

3、將kind參數設置為‘hex’,生成六邊形核密度估計聯合圖

y = pd.Series(y,name='y')
ax = sns.jointplot(x=x,y=y,kind='hex')

4、將kind參數設置為‘kde’,將直方圖和散點圖轉換為核密度估計圖,並將邊際軸的留白大小設定為0

y = pd.Series(y,name='y')
ax = sns.jointplot(x=x,y=y,kind='kde',space=0) 

5、利用邊緣圖形參數字典為邊緣圖形添加rugplot的內容,並修改直方個數為15

ax = sns.jointplot(x=x,y=y,color='g',kind='reg',marginal_kws={'bins':15,'rug':True})

 

 6、jointplot支持圖層疊加

  例:我們首先繪制出的聯合圖中kind限制為擬合線性回歸直線,在此基礎上利用.plot_joint方法疊加核密度估計圖層:

ax = sns.jointplot(x=x,y=y,color='g',kind='reg').plot_joint(sns.kdeplot,n_levels=5)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM