誤差線用于顯示數據的不確定程度,誤差一般使用標準差(Standard Deviation)或標準誤差(Standard Error)。
?
標準差(SD):是方差的算術平方根。如果是總體標準差,那么用σ表示,如果是樣本標準差,那么用s表示。標準差反映數據集的離散程度,標準差越小,就說明數據越集中在其平均值附近。公式:
(總體),
(樣本)

標準誤差(SE):是樣本分布的標準差。如果是樣本平均數分布的標準差,那么就稱為SEM(standard error of the mean),就是說每次從總體中抽取n個樣本,抽取很多次后,每次抽樣的平均值(
?)就形成了一個數據分布,這個數據分布有自己的平均值和標準差。抽樣的平均值分布的平均數應該接近總體平均數(?μ)。標準誤差反映樣本(sample)對于總體(population)的差異性,每次抽樣的樣本數越多,標準誤差就越小。公式:

?
下面利用Nathan Yau所著的《鮮活的數據:數據可視化指南》一書中的數據,學習畫圖。
?
數據地址:http://datasets.flowingdata.com/crimeRatesByState2005.csv
?
以下是這個數據文件的前5行:
state murder forcible_rape robbery aggravated_assault \ 0 United States 5.6 31.7 140.7 291.1 1 Alabama 8.2 34.3 141.4 247.8 2 Alaska 4.8 81.1 80.9 465.1 3 Arizona 7.5 33.8 144.4 327.4 4 Arkansas 6.7 42.9 91.1 386.8 burglary larceny_theft motor_vehicle_theft population 0 726.7 2286.3 416.7 295753151 1 953.8 2650.0 288.3 4545049 2 622.5 2599.1 391.0 669488 3 948.4 2965.2 924.4 5974834 4 1084.6 2711.2 262.1 2776221
這是美國各州各種犯罪行為的發生率(每10萬人口)。
?
讓我們畫一個圖,把全美各犯罪率的平均數,標準差展現出來。
?
誤差線: ax.errorbar(x,y,yerr=error size in y axis,xerr=error size in x axis)
?
代碼如下:
import numpy as np import pandas as pd from matplotlib import pyplot as plt crime=pd.read_csv(r"http://datasets.flowingdata.com/crimeRatesByState2005.csv") fig,ax=plt.subplots(figsize=(8,4))col=crime.columns.astype(str) #提取列名,將來做x軸刻度標簽 crime=crime[1:] #把第一行US的數據去除 data=crime.loc[:,"murder":"motor_vehicle_theft"] #提取數據部分,以便將來進行計算 crime.loc["mean"]=data.apply(np.mean) #增加一行,為數據每列的均值,apply函數用于數據每一列 crime.loc["standard deviation"]=data.apply(np.std) #增加一行,為數據每列的標準差,apply函數用于數據每一列#畫誤差線,x軸一共7項,y軸顯示平均值,y軸誤差為標準差 ax.errorbar(np.arange(7),crime.loc["mean","murder":"motor_vehicle_theft"],\yerr=crime.loc["standard deviation","murder":"motor_vehicle_theft"],\fmt="o",color="blue",ecolor='grey',elinewidth=2,capsize=4) ax.set_xticklabels(col,rotation=45) #設置x軸刻度標簽,并使其傾斜45度,不至于重疊 plt.show()
?
圖像如下:
?
?
另外,還可以在柱形圖或條形圖上畫誤差線,分別在ax.bar命令里加上yerr參數,或在ax.barh命令里加上xerr參數即可。
?