1. 程式人生 > >Seaborn入門系列(二)——barplot&countplot&pointplot

Seaborn入門系列(二)——barplot&countplot&pointplot

微信公眾號:iPythonistas
如有問題或建議,請公眾號留言

Seaborn是基於matplotlib的Python視覺化庫。 它提供了一個高階介面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高階的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。但應強調的是,應該把Seaborn視為matplotlib的補充,而不是替代物。

注:所有程式碼均在IPython notebook中實現

barplot(條形圖)

條形圖表示數值變數與每個矩形高度的中心趨勢的估計值,並使用誤差線提供關於該估計值附近的不確定性的一些指示。具體用法如下:

seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=(function mean), ci=95, n_boot=1000, units=None, orient=None, color=None, palette=None, saturation=0.75, errcolor='.26', errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)

接下來還是通過具體例子學習裡面的一些引數的用法:

%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="12")  #用於解決中文顯示不了的問題
sns.set_style("whitegrid")

本篇文章所採用的資料集內容如下

data.head(5)   #data是一個dataframe

  x,y(str):dataframe中的列名

  data:dataframe或者陣列

sns.barplot(x="color",y="age",data=data)

關於影象的解釋:Seaborn會對”color“列中的數值進行歸類

後按照estimator引數的方法(預設為平均值)計算相應的值,計算出來的值就作為條形圖所顯示的值(條形圖上的誤差棒則表示各類的數值相對於條形圖所顯示的值的誤差

hue(str):dataframe的列名,按照列名中的值分類形成分類的條形圖

sns.barplot(x="color",y="age",data=data,hue="gender")

order, hue_order (lists of strings):用於控制條形圖的順序

fig,axes=plt.subplots(1,2)
sns.barplot(x="gender",y="age",data=data,ax=axes[0])
sns.barplot(x="gender",y="age",data=data,ax=axes[1],order=["女","男"])

estimator:<function name>控制條形圖的取整列資料的什麼值

fig,axes=plt.subplots(1,2)
sns.barplot(x="gender",y="age",data=data,ax=axes[0])  #左圖,預設為平均值
sns.barplot(x="gender",y="age",estimator=np.median,data=data,ax=axes[1])  #右圖,中位數

 

ci(float): 允許的誤差的範圍(控制誤差棒的百分比,在0-100之間),若填寫"sd",則誤差棒用標準誤差。(預設為95)

fig,axes=plt.subplots(1,2)
sns.barplot(x="color",y="age",data=data,ci=0,ax=axes[0])  #左圖
sns.barplot(x="color",y="age",data=data,ci="sd",ax=axes[1])  #右圖

capsize(float):設定誤差棒帽條(上下兩根橫線)的寬度

fig,axes=plt.subplots(1,2)
sns.barplot(x="color",y="age",data=data,ax=axes[0],capsize=.2)  #左圖
sns.barplot(x="color",y="age",data=data,ax=axes[1],capsize=.5)  #右圖

palette:調色盤,控制不同的顏色style

fig,axes=plt.subplots(2,1)
sns.barplot(x="color",y="age",data=data,ax=axes[0])  #上圖
sns.barplot(x="color",y="age",data=data,palette="Set3",ax=axes[1])  #下圖

X,Y軸互換

fig,axes=plt.subplots(1,2)
sns.barplot(x="age",y="color",data=data,ax=axes[0])  #左圖
sns.barplot(x="color",y="age",data=data,ax=axes[1])  #右圖

countplot入門

一個計數圖可以被認為是一個分類直方圖,而不是定量的變數。基本的api和選項與barplot()相同,因此您可以比較巢狀變數中的計數。(工作原理就是對輸入的資料分類,條形圖顯示各個分類的數量)具體用法如下:

seaborn.countplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, dodge=True, ax=None, **kwargs)

注:countplot引數和barplot基本差不多,可以對比著記憶,有一點不同的是countplot中不能同時輸入x和y,且countplot沒有誤差棒。

根據例子體驗一下:

fig,axes=plt.subplots(1,2)
sns.countplot(x="gender",data=data,ax=axes[0]) #左圖
sns.countplot(y="gender",data=data,ax=axes[1])  #右圖

fig,axes=plt.subplots(1,2)
sns.countplot(x="gender",hue="smoker",data=data,ax=axes[0]) #左圖
sns.countplot(y="gender",hue="smoker",data=data,ax=axes[1])  #右圖

fig,axes=plt.subplots(2,1)
sns.countplot(x="color",data=data,ax=axes[0])  #上圖
sns.countplot(x="color",data=data,palette="Set3",ax=axes[1])  #下圖

pointplot入門

點圖代表散點圖位置的數值變數的中心趨勢估計,並使用誤差線提供關於該估計的不確定性的一些指示。點圖可能比條形圖更有用於聚焦一個或多個分類變數的不同級別之間的比較他們尤其善於表現互動作用:一個分類變數的層次之間的關係如何在第二個分類變數的層次之間變化連線來自相同色調等級的每個點的線允許互動作用通過斜率的差異進行判斷,這比對幾組點或條的高度比較容易。具體用法如下:

seaborn.pointplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=(function mean), ci=95, n_boot=1000, units=None, markers='o', linestyles='-', dodge=False, join=True, scale=1, orient=None, color=None, palette=None, errwidth=None, capsize=None, ax=None, **kwargs)

下面繼續使用之前的資料集進行繪圖,和barplot相同的引數就不再具體演示,重點演示pointplot獨有的。

sns.set(font_scale) #初始化seaborn配置,並設定字型大小
sns.set_style("darkgrid") #灰色網格背景
sns.pointplot(x="smoker",y="age",data=data)

圖中的點為這組資料的平均值點,豎線則為誤差棒,預設兩個均值點會相連線,若不想顯示,可以通過join引數實現:

sns.pointplot(x="smoker",y="age",data=data,join=False)

之前我們演示過barplot的hue引數,現在我們看一下pointplot的hue引數:

sns.pointplot(x="smoker",y="age",data=data,hue="gender")

我們可以看到兩個類別的誤差棒重疊在了一起,使資料觀測不清晰。怎麼解決這個問題呢?pointplot的dodge引數可以使重疊的部分錯開:

sns.pointplot(x="smoker",y="age",data=data,hue="gender",dodge=True)

接下來我們對均值點的樣式(由引數markers控制)和相同色調的點之間的連線(由引數linestyles控制)做一下改動。

sns.pointplot(x="smoker",y="age",data=data,hue="gender",dodge=True,markers=["*","x"],linestyles=["-.","--"])

其他樣式請參考matplotlib線條樣式

將X,Y軸互換

sns.pointplot(x="age",y="color",data=data)

通過color引數控制不同單層圖的顏色

sns.pointplot(x="age",y="color",data=data,color="#bb3f3f")

還有其他效果和barplot一樣的引數,大家可以動手自己試一下。以上內容是我結合官方文件和自己的一點理解寫成的,有什麼錯誤大家可以指出來並提提意見共同交流、進步,也希望我寫的這些能夠給閱讀完本文的你或或少的幫助!