Matplotlib學習---用matplotlib畫誤差線(errorbar)


誤差線用於顯示數據的不確定程度,誤差一般使用標准差(Standard Deviation)或標准誤差(Standard Error)。

 

標准差(SD):是方差的算術平方根。如果是總體標准差,那么用σ表示,如果是樣本標准差,那么用s表示。標准差反映數據集的離散程度,標准差越小,就說明數據越集中在其平均值附近。公式: (總體), {\displaystyle s={\sqrt {\frac {\sum _{i=1}^{N}(x_{i}-{\overline {x}})^{2}}{N-1}}}.}(樣本)
 
 
標准誤差(SE):是樣本分布的標准差。如果是樣本平均數分布的標准差,那么就稱為SEM(standard error of the mean),就是說每次從總體中抽取n個樣本,抽取很多次后,每次抽樣的平均值(  )就形成了一個數據分布,這個數據分布有自己的平均值和標准差。抽樣的平均值分布的平均數應該接近總體平均數(  μ)。標准誤差反映 樣本(sample)對於總體(population)的差異性,每次抽樣的樣本數越多,標准誤差就越小。公式:{\displaystyle {\sigma }_{\bar {x}}\ ={\frac {\sigma }{\sqrt {n}}}}
 

 

下面利用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參數即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM