柱狀圖用於反映數值變量的集中趨勢,用誤差線估計變量的差值統計。理解誤差線有助於我們准確的獲取柱狀圖反映的信息,因此打算先介紹一下誤差線方面的內容,然后介紹一下利用seaborn庫繪制柱狀圖。
1.誤差線的理解
誤差線源於統計學,表示數據誤差(或不確定性)范圍,以更准確的方式呈現數據。當label上有一組采樣數據時,一般將這組數據的平均值作為該label上標注的值,而用誤差線表示該均值可能的誤差范圍。誤差線可以用標准差(standard deviation,SD)、標准誤(standard error,SE)和置信區間表示,使用時可選用任意一種表示方法並作相應說明即可。當label上值有一個數據時,則不需要標注誤差線。
- 標准差
在實際中,總體的標准差總是未知的,我們一般用樣本標准差來估計總體標准差,樣本標准差定義為
其中為樣本均值,則誤差線的范圍為(
)
- 標准誤
當多次進行重復采樣時,會得到多組數據,每組數據都有一個平均值,這些平均值間是有差異的,盡管在每組數據量較大時,這個差異會比較小,標准誤表示的就是平均值的誤差范圍。可以對標准誤做以下估計
其中為樣本的標准差,則誤差線的范圍為(
)
- 置信區間
由於bar上標明的值是樣本均值,這里實際上是對樣本均值進行區間估計得到的置信區間。一般作區間估計時,需要先獲知總體的分布,在實際中我們依據樣本的數據量來假設其總體的分布。當為大樣本數據情況時(一般數據量大於30),假設樣本服從正態分布,當數據量較小時(小於30)時假設樣本服從-分布。當然,若已知總體分布時則不需要假設,包括接下來均值及標准差的計算,若已知時則不需要對其進行估計。
當總體為正態分布時,誤差線的范圍為
其中依據區間置信度來計算,C表示置信度(只列出常見的置信度)
當總體為-分布時,誤差線的范圍為
其中依據置信度及樣本自由度(N-1)來計算,一般查詢
-分布得到
這里以均值的置信區間為例,順便說一下對置信區間的理解。置信區間(置信度為
)是指在重復采集
次時,得到的樣本均值有
次可能落在置信區間內,我們不能對置信區間作如下解讀:總體均值有
的可能性在置信區間內,這是不對的,在一次采樣完成后,按照頻率學派的觀點,只有“在區間內”、“在區間外”這兩種情況,而不能討論可能性(可能性是貝葉斯學派的觀點)。
通過以上的說明,可以獲知這樣一點內容:當誤差線比較“長”時,一般要么是數據離散程度大,要么是數據樣本少。
2.利用seaborn.barplot()繪制柱狀圖
seaborn.barplot()繪圖參數的說明為:
- x:指定label值,可以是一個序列
- y:對應每個label上的數據,可以是一個序列
- hue:指定分類變量,其使用示例如下,左圖是不使用hue參數時的圖形,右圖是使用hue的圖形
- data:使用的數據集。在上面的例子中,當指定"data=df"時,可以在“x=”、"y="處直接使用column名稱,否則需要使用"x=data['a']"的形式
- order,hue_order:order控制bar繪制的順序,hue_order控制一個bra內每個類繪圖順序,例如分別執行以下代碼
- estimator:設置每一個label上顯示的統計量類型,默認為平均值,可修改為最大值、中位值等。注意,若修改為非平均值,那么前面所提到的誤差線都需要做修改,因為前面的誤差線解釋都是基於平均值的。
- ci:在seaborn.barplot()中誤差線默認表示的是均值的置信區間,因此當ci為(0,100)間的值時表示置信區間的置信度,默認為95;ci還可以取值為'sd',此時誤差線表示的是標准誤差;當ci取值為None時,則不顯示誤差線
- n_boot:計算代表置信區間的誤差線時,默認會采用bootstrap抽樣方法(在樣本量較小時比較有用),該參數控制bootstrap抽樣的次數
- units:該參數的解釋我暫時還未弄明白
- orient:設置柱狀圖水平繪制還是豎直繪制,"h"表示水平,“v”表示豎直。
- color:設置bar的顏色,這里似乎用於將所有的bar設置為同一種顏色
- pattle:調色板,設置bar的以不同顏色顯示,所有的顏色選擇都要是matplotlib是能識別的顏色
- saturation:設置顏色的飽和度取值為[0,1]間
- errcolor:設置誤差線的顏色,默認為黑色
- errwidth:設置誤差線的顯示線寬
- capsize:設置誤差線頂部、底端處橫線的顯示長度
- dodge:當使用分類參數“hue”時,可以通過dodge參數設置是將不同的類分別用一個bar表示,還是在一個bar上通過不同顏色表示,下圖總左邊是dodge=True,右邊是dodge=False,默認為True。
- ax:選擇將圖形顯示在哪個Axes對象上,默認為當前Axes對象
- kwargs:matplotlib.plot.bar()中其它的參數
返回值:ax,matplotlib.Axes對象