微信公衆號:「Python讀財」
若有問題或建議,請公衆號留言
Seaborn是基於matplotlib的Python可視化庫。 它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn實際上是在matplotlib的基礎上進行了更高級的API封裝,從而使得做圖更加容易,不須要通過大量的調整就能使你的圖變得精緻。數組
注:全部代碼均在IPython notebook中實現微信
箱形圖(Box-plot)又稱爲盒須圖、盒式圖或箱線圖,是一種用做顯示一組數據分散狀況資料的統計圖。它能顯示出一組數據的最大值、最小值、中位數及上下四分位數。因形狀如箱子而得名。在各類領域也常常被使用,常見於品質管理。圖解以下:學習
接下來咱們介紹Seaborn中的箱型圖的具體實現方法,這是boxplot的API:spa
seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
咱們從具體的實例出發3d
%matplotlib inline import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt plt.rc("font",family="SimHei",size="15") #解決中文亂碼問題
本文所使用的數據集是鳶尾花卉數據集code
data.head(6)
x
,y
:dataframe中的列名(str)或者矢量數據blog
data
:dataframe或者數組資源
sns.boxplot(x=data["pw"],data=data)
palette
:調色板,控制圖像的色調rem
fig,axes=plt.subplots(1,2,sharey=True) sns.boxplot(x="catagory",y="pw",data=data,ax=axes[0]) #左圖 sns.boxplot(x="catagory",y="pw",data=data,palette="Set3",ax=axes[1]) #右圖
hue(str)
:dataframe的列名,按照列名中的值分類造成分類的條形圖文檔
sns.boxplot(x="color",y="pl",data=data,hue="catagory",palette="Set3")
order
, hue_order (lists of strings)
:用於控制條形圖的順序
sns.boxplot(x="catagory",y="pw",data=data,palette="Set3",order=[2,1,0])
orient
:"v"|"h" 用於控制圖像使水平仍是豎直顯示(這一般是從輸入變量的dtype推斷出來的,此參數通常當不傳入x、y,只傳入data的時候使用)
fig,axes=plt.subplots(2,1) sns.boxplot(data=data,orient="v",palette="Set3",ax=axes[0]) #豎直顯示 sns.boxplot(data=data,orient="h",palette="Set3",ax=axes[1]) #水平顯示
fliersize
:float,用於指示離羣值觀察的標記大小
fig,axes=plt.subplots(1,2) sns.boxplot(x="color",y="pl",data=data,ax=axes[0]) #fliersize默認爲5 sns.boxplot(x="color",y="pl",data=data,fliersize=20,ax=axes[1])
whis
:肯定離羣值的上下界(IQR超太低和高四分位數的比例),此範圍以外的點將被識別爲異常值。IQR指的是上下四分位的差值。
fig,axes=plt.subplots(1,2) sns.boxplot(x="color",y="pl",data=data,whis=1,ax=axes[0]) #左圖 sns.boxplot(x="color",y="pl",data=data,whis=2,ax=axes[1]) #右圖
width
:float,控制箱型圖的寬度
fig,axes=plt.subplots(1,2) sns.boxplot(x="color",y="pl",data=data,width=0.3,ax=axes[0]) #左圖 sns.boxplot(x="color",y="pl",data=data,width=0.8,ax=axes[1]) #右圖
violinplot與boxplot扮演相似的角色,它顯示了定量數據在一個(或多個)分類變量的多個層次上的分佈,這些分佈能夠進行比較。不像箱形圖中全部繪圖組件都對應於實際數據點,小提琴繪圖以基礎分佈的核密度估計爲特徵。具體用法以下:
seaborn.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, width=0.8, inner='box', split=False, dodge=True, orient=None, linewidth=None, color=None, palette=None, saturation=0.75, ax=None, **kwargs)
實例所用的數據集以下:
data.head(6)
在這裏就再也不介紹x,y,hue,data,order,hue_order,palette參數的用法,這些參數的用法和以前介紹的圖形的用法是同樣的,若有須要能夠查看以前的內容。
先來畫一個小提琴圖:
sns.violinplot(x="gender",y="age",data=data)
split
:將split
設置爲true
則繪製分拆的violinplot以比較通過hue拆分後的兩個量:
fig,axes=plt.subplots(2,1) ax=sns.violinplot(x="color",y="age",data=data,hue="smoker",split=True,ax=axes[0]) #上圖,拆分後的圖 ax=sns.violinplot(x="color",y="age",data=data,hue="smoker",ax=axes[1]) #下圖
scale_hue
:bool,當使用色調變量(hue參數)嵌套小提琴時,此參數肯定縮放是在主要分組變量(scale_hue = true)的每一個級別內仍是在圖上的全部小提琴(scale_hue = false)內計算出來的。
fig,axes=plt.subplots(2,1) ax=sns.violinplot(x="color",y="age",data=data,hue="smoker",split=True,scale_hue=False,ax=axes[0]) #上圖 ax=sns.violinplot(x="color",y="age",data=data,hue="smoker",split=True,scale_hue=True,ax=axes[1]) #下圖
orient
:"v"|"h" 用於控制圖像使水平仍是豎直顯示(這一般是從輸入變量的dtype推斷出來的,此參數通常當不傳入x、y,只傳入data的時候使用)
fig,axes=plt.subplots(2,1) sns.violinplot(data=data[["height","weight","age"]],orient="v",ax=axes[0]) #上圖 sns.violinplot(data=data[["height","weight","age"]],orient="h",ax=axes[1]) #下圖
inner
:控制violinplot內部數據點的表示,有'box'
, 'quartile'
, 'point'
, 'stick'
四種方式。
fig,axes=plt.subplots(2,2) sns.violinplot(x="color",y="age",data=data,inner="box",ax=axes[0,0]) #鋼琴圖內顯示箱型圖(左上) sns.violinplot(x="color",y="age",data=data,inner="quartile",ax=axes[0,1]) #鋼琴圖內顯示四分位數線(右上) sns.violinplot(x="color",y="age",data=data,inner="point",ax=axes[1,0]) #鋼琴圖內顯示具體數據點(左下) sns.violinplot(x="color",y="age",data=data,inner="stick",ax=axes[1,1]) #鋼琴圖內顯示具體數據棒(右下)
scale
:該參數用於縮放每把小提琴的寬度,有「area」, 「count」, 「width」三種方式
fig,axes=plt.subplots(3,1) sns.violinplot(x="color",y="age",data=data,scale="area",ax=axes[0]) #若是爲"area",每把小提琴將有相同的面積(上圖) sns.violinplot(x="color",y="age",data=data,scale="count",ax=axes[1]) #若是爲"count",小提琴的寬度將根據該小組中觀察的數量來縮放(中圖) sns.violinplot(x="color",y="age",data=data,scale="width",ax=axes[2]) #若是爲"age",每把小提琴將有相同的寬度(下圖)
cut
:float,距離,以帶寬大小爲單位,以控制小提琴圖外殼延伸超過內部極端數據點的密度。設置爲0以將小提琴範圍限制在觀察數據的範圍內(即,在ggplot中具備與trim = true相同的效果)
fig,axes=plt.subplots(2,1) sns.violinplot(x="age",y="gender",data=data,ax=axes[0]) #上圖 sns.violinplot(x="age",y="gender",data=data,cut=0,ax=axes[1]) #下圖
width
:float,控制鋼琴圖的寬度(比例)
fig,axes=plt.subplots(2,1) sns.violinplot(x="color",y="age",data=data,ax=axes[0],width=0.5) #上圖 sns.violinplot(x="color",y="age",data=data,ax=axes[1],width=0.9) #下圖
這已是Seaborn入門系列的第三篇文章了,相信你們已經大概瞭解Seaborn的做圖過程,也能夠體會到用Seaborn做圖相比於matplotlib更加簡單。以上內容是我結合官方文檔和本身的一點理解寫成的,有什麼錯誤你們能夠指出來並提提意見,共同交流、進步,也但願我寫的這些可以給閱讀完本文的你或或少的幫助!
關注個人公衆號「Python讀財」,後臺回覆「py」便可獲取Python學習資源禮包,還有Python學習交流羣哦!