Seaborn5 分鐘入門 (二)——barplot&countplot&pointplot

Harry_03發表於2020-01-17

微信公眾號:「Python讀財」
如有問題或建議,請公眾號留言

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

image

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


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

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

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

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

image

xy(str):dataframe中的列名

data:dataframe或者陣列

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

image

關於影像的解釋:Seaborn會對'color'列中的數值進行歸類後按照estimator引數的方法(預設為平均值)計算相應的值,計算出來的值就作為條形圖所顯示的值(條形圖上的誤差棒則表示各類的數值相對於條形圖所顯示的值的誤差

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

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

image

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=["女","男"])

image

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

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])  #右圖,中位數

image

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])  #右圖

image

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)  #右圖

image

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])  #下圖

image

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])  #右圖

image


一個計數圖可以被認為是一個分類直方圖,而不是定量的變數。基本的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])  #右圖

image

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])  #右圖

image

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])  #下圖

image


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

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)

image

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

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

image

之前我們演示過barplothue引數,現在我們看一下pointplothue引數:

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

image

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

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

image

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

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

image

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

將X,Y軸互換

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

image

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

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

image

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

關注我的公眾號「Python讀財」,後臺回覆「py」即可獲取Python學習資源禮包,還有Python學習交流群哦!

底部二維碼.png

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章