Python可視化神器Seaborn入門系列(二)——barplot&countplot&pointplot

作者:why Python愛好者社區--專欄作者

個人公眾號:iPythonistas

專註python爬蟲,數據可視化,數據分析,python前端技術

公眾號:Python愛好者社區

前文傳送門:Python可視化神器Seaborn入門系列(一)——kdeplot和distplot

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 inlineimport pandas as pdimport numpy as npimport seaborn as snsimport matplotlib.pyplot as pltplt.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一樣的參數,大家可以動手自己試一下。以上內容是我結合官方文檔和自己的一點理解寫成的,有什麼錯誤大家可以指出來並提提意見共同交流、進步,也希望我寫的這些能夠給閱讀完本文的你或或少的幫助!


推薦閱讀:

python與機器學習入門(4)多元線性回歸
案例分析:聯想利用Alluxio分析多位置來源的PB級智能手機數據並消除ETL
人人都是數據科學家?Airbnb數據大學開課了
Excel數據分析常用函數大全(新人必備)
Netflix與推薦系統

TAG:Python | 數據可視化 | 數據分析 |