Python可視化 | Seaborn5分鐘入門(二)——barplot countplot

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

注:所有代碼均在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:控制條形圖取每列數據的什麼值

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