1、簡介數組
seaborn是Python中基於matplotlib的具備更多可視化功能和更優美繪圖風格的繪圖模塊,當咱們想要探索單個或一對數據分佈上的特徵時,可使用到seaborn中內置的若干函數對數據的分佈進行多種多樣的可視化,本文以jupyter notebook爲編輯工具,針對seaborn中的kdeplot、rugplot、distplot和jointplot,對其參數設置和具體用法進行詳細介紹。 函數
2、kdeplot工具
seaborn中的kdeplot可用於對單變量和雙變量進行核密度估計並可視化,其主要參數以下:spa
data:一維數組,單變量時做爲惟一的變量3d
data2:格式同data2,單變量時不輸入,雙變量做爲第2個輸入變量code
shade:bool型變量,用於控制是否對核密度估計曲線下的面積進行色彩填充,True表明填充orm
vertical:bool型變量,在單變量輸入時有效,用於控制是否顛倒x-y軸位置對象
kernel:字符型輸入,用於控制核密度估計的方法,默認爲'gau',即高斯核,特別地在2維變量的狀況下僅支持高斯核方法blog
legend:bool型變量,用於控制是否在圖像上添加圖例ip
cumulative:bool型變量,用於控制是否繪製核密度估計的累計分佈,默認爲False
shade_lowest:bool型變量,用於控制是否爲核密度估計中最低的範圍着色,主要用於在同一個座標軸中比較多個不一樣分佈整體,默認爲True
cbar:bool型變量,用於控制是否在繪製二維核密度估計圖時在圖像右側邊添加比色卡
color:字符型變量,用於控制核密度曲線色彩,同plt.plot()中的color參數,如'r'表明紅色
cmap:字符型變量,用於控制核密度區域的遞進色彩方案,同plt.plot()中的cmap參數,如'Blues'表明藍色系
n_levels:int型,在而爲變量時有效,用於控制核密度估計的區間個數,反映在圖像上的閉環層數
下面咱們來看幾個示例來熟悉kdeplot中上述參數的實際使用方法:
首先咱們須要準備數據,本文使用seaborn中自帶的鳶尾花數據做爲示例數據,由於在jupyter notebook中運行代碼,因此加上魔術命令%matplotlib inline使得圖像得以在notebook中顯示
import seaborn as sns sns.set(color_codes=True) import matplotlib.pyplot as plt %matplotlib inline #加載seaborn自帶的鳶尾花數據集,格式爲數據框 iris = sns.load_dataset('iris') #分離出setosa類的花對應的屬性值 setosa = iris.loc[iris.species == "setosa"].reset_index(drop=True) #分離出virginica類的花對應的屬性值 virginica = iris.loc[iris.species == "virginica"].reset_index(drop=True)
首先咱們不修改其餘參數只傳入數據來觀察繪製出的圖像:
#繪製iris中petal_width參數的核密度估計圖 ax = sns.kdeplot(iris.petal_width)
加上紅色填充顏色,並禁止圖例顯示:
ax = sns.kdeplot(iris.petal_width,shade=True,color='r')
修改成核密度分佈:
ax = sns.kdeplot(iris.petal_width, shade=True, color='r', cumulative=True)
交換x-y軸位置:
ax = sns.kdeplot(iris.petal_width, shade=True, color='r', vertical=True)
下面咱們來繪製雙變量聯合核密度估計圖:
#繪製setosa花的petal_width與petal_length的聯合核密度估計圖 ax = sns.kdeplot(setosa.petal_width, setosa.petal_length)
修改調色方案爲藍色,並設置shade_lowest=True:
ax = sns.kdeplot(setosa.petal_width, setosa.petal_length, cmap='Blues', shade=True, shade_lowest=True)
在上圖基礎上修改shade_lowest=False:
ax = sns.kdeplot(setosa.petal_width, setosa.petal_length, cmap='Blues', shade=True, shade_lowest=False)
能夠看到這時最低密度估計曲線以外的區域沒有被調色方案所浸染。
將核密度曲線區間個數修改成5:
ax = sns.kdeplot(setosa.petal_width, setosa.petal_length, cmap='Blues', shade=True, shade_lowest=False, n_levels=5)
能夠看到這時的核密度區間要粗略不少。
在同一個子圖中繪製兩個不一樣一維整體的核密度估計圖,這裏爲了把它們區分開分別定義了label參數以顯示在圖例中:
ax1 = sns.kdeplot(setosa.petal_width,label='setosa.petal_width') ax2 = sns.kdeplot(virginica.petal_width,label='virginica.petal_width')
在同一個子圖中繪製兩個不一樣二維整體的核密度估計圖:
ax1 = sns.kdeplot(setosa.sepal_width,setosa.sepal_length, cmap='Blues', shade=True, shade_lowest=False) ax2 = sns.kdeplot(virginica.sepal_width,virginica.sepal_length, cmap='Greens', shade=True, shade_lowest=False)
3、rugplot
rugplot的功能很是樸素,用於繪製出一維數組中數據點實際的分佈位置狀況,即不添加任何數學意義上的擬合,單純的將記錄值在座標軸上表現出來,相對於kdeplot,其能夠展現原始的數據離散分佈狀況,其主要參數以下:
a:一維數組,傳入觀測值向量
height:設置每一個觀測點對應的小短條的高度,默認爲0.05
axis:字符型變量,觀測值對應小短條所在的軸,默認爲'x',即x軸
使用默認參數進行繪製:
ax = sns.rugplot(iris.petal_length)
調換所處的座標軸:
ax = sns.rugplot(iris.petal_length,axis='y')
修改小短條高度和顏色:
ax = sns.rugplot(iris.petal_length, color='r', height=0.2)
3、distplot
seaborn中的distplot主要功能是繪製單變量的直方圖,且還能夠在直方圖的基礎上施加kdeplot和rugplot的部份內容,是一個功能很是強大且實用的函數,其主要參數以下:
a:一維數組形式,傳入待分析的單個變量
bins:int型變量,用於肯定直方圖中顯示直方的數量,默認爲None,這時bins的具體個數由Freedman-Diaconis準則來肯定
hist:bool型變量,控制是否繪製直方圖,默認爲True
kde:bool型變量,控制是否繪製核密度估計曲線,默認爲True
rug:bool型變量,控制是否繪製對應rugplot的部分,默認爲False
fit:傳入scipy.stats中的分佈類型,用於在觀察變量上抽取相關統計特徵來強行擬合指定的分佈,下文的例子中會有具體說明,默認爲None,即不進行擬合
hist_kws,kde_kws,rug_kws:這幾個變量都接受字典形式的輸入,鍵值對分別對應各自原生函數中的參數名稱與參數值,在下文中會有示例
color:用於控制除了fit部分擬合出的曲線以外的全部對象的色彩
vertical:bool型,控制是否顛倒x-y軸,默認爲False,即不顛倒
norm_hist:bool型變量,用於控制直方圖高度表明的意義,爲True直方圖高度表示對應的密度,爲False時表明的是對應的直方區間內記錄值個數,默認爲False
label:控制圖像中的圖例標籤顯示內容
使用默認參數進行繪製:
ax = sns.distplot(iris.petal_length)
修改全部對象的顏色,繪製rugplot部分,並修改bins爲20:
ax = sns.distplot(iris.petal_length,color='r', rug=True, bins=20)
在上圖的基礎上強行擬合卡方分佈並利用參數字典設置fit曲線爲綠色:
from scipy.stats import chi2 ax = sns.distplot(iris.petal_length,color='r', rug=True, bins=20, fit=chi2, fit_kws={'color':'g'})
修改norm_hist參數爲False使得縱軸顯示的再也不是密度而是頻數(注意這裏必須關閉kde和fit繪圖的部分,不然縱軸依然顯示密度),利用hist_kws傳入字典調整直方圖部分色彩和透明度,利用rug_kws傳入字典調整rugplot部分小短條色彩:
ax = sns.distplot(iris.petal_length,color='r', rug=True, kde=False, bins=20, fit=None, hist_kws={'alpha':0.6,'color':'orange'}, rug_kws={'color':'g'}, norm_hist=False)
4、jointplot
之因此按照kdeplot-rugplot-distplot的順序來介紹是由於distplot中涉及到kdeplot與rugplot中的相關內容,而本文最後要介紹的函數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:傳入參數字典來分別精細化控制每一個組件
在默認參數設置下繪製成對變量聯合圖:
ax = sns.jointplot(x='sepal_length',y='sepal_width',data=setosa)
值得一提的是,jointplot還貼心的在圖像上說明了成對變量之間的皮爾遜簡單相關係數以及相關性檢驗的p值結果。
將kind參數設置爲'reg',爲聯合圖添加線性迴歸擬合直線與核密度估計結果:
ax = sns.jointplot(x='sepal_length',y='sepal_width',data=setosa, kind='reg')
修改kind爲'hex'來爲聯合圖生成六邊形核密度估計:
ax = sns.jointplot(x='sepal_length',y='sepal_width',data=setosa, kind='hex')
修改kind爲'kde'來將直方圖和散點圖轉換爲核密度估計圖,並將邊際軸的留白大小設定爲0:
ax = sns.jointplot(x='sepal_length',y='sepal_width',data=setosa, kind='kde', space=0, color='g')
jointplot還支持圖層疊加,以下面的例子,咱們首先繪製出的聯合圖中kind限制爲擬合線性迴歸直線,在此基礎上利用.plot_joint方法疊加核密度估計圖層:
ax = (sns.jointplot(x='sepal_length',y='sepal_width',data=setosa, color='g', kind='reg')).plot_joint(sns.kdeplot, zorder=0, n_levels=10)
根據你的具體須要還能夠疊加出更加豐富的圖像。
調大ratio參數使得邊緣圖更加小巧:
ax = sns.jointplot(x='sepal_length',y='sepal_width',data=setosa, kind='kde', space=0, color='g', ratio=15)
利用邊緣圖形參數字典爲邊緣圖形添加rugplot的內容,並修改直方個數爲15:
ax = sns.jointplot(x='sepal_length',y='sepal_width',data=setosa, marginal_kws=dict(bins=15, rug=True), linewidth=1,space=0)
實際上,若是你足夠了解matplotlib與seaborn,能夠經過各類組合獲得信息量更豐富特別的圖像!
以上就是本文的所有內容,若有筆誤望指出!