【2.6.7】errorbar--误差棒图

工业产品或者科学实验往往由于客观原因存在一定的误差,针对这一波动范围称之为置信区间。在可视化数据时,误差棒图可以很好的表现这种有一定置信区间的带误差数据。

相关函数:

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, capthick=None)

官方项目地址,官方示例

主要参数:

x,y: 数据点的位置坐标
xerr,yerr: 数据的误差范围
fmt: 数据点的标记样式以及相互之间连接线样式
ecolor: 误差棒的线条颜色
elinewidth: 误差棒的线条粗细
capsize: 误差棒边界横杠的大小
capthick: 误差棒边界横杠的厚度
ms: 数据点的大小
mfc: 数据点的颜色
mec: 数据点边缘的颜色

一、例1

范例实现

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0.1,0.5,10)#生成[0.1,0.5]等间隔的十个数据
y=np.exp(x)

error=0.05+0.15*x#误差范围函数

error_range=[error*0.3,error]#下置信度和上置信度

plt.errorbar(x,y,yerr=error_range,fmt='o:',ecolor='hotpink',elinewidth=3,ms=5,mfc='wheat',mec='salmon',capsize=3)

plt.xlim(0.05,0.55)#设置x轴显示范围区间
plt.show()

二、例2

数据:

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

代码:

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()

示意图

三、例3

代码

import matplotlib.pyplot as plt


fig = plt.figure()
x = np.arange(10)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)

plt.errorbar(x, y + 3, yerr=yerr, label='both limits (default)')

plt.errorbar(x, y + 2, yerr=yerr, uplims=True, label='uplims=True')

plt.errorbar(x, y + 1, yerr=yerr, uplims=True, lolims=True,
             label='uplims=True, lolims=True')

upperlimits = [True, False] * 5
lowerlimits = [False, True] * 5
plt.errorbar(x, y, yerr=yerr, uplims=upperlimits, lolims=lowerlimits,
             label='subsets of uplims and lolims')

plt.legend(loc='lower right')

代码:

fig = plt.figure() x = np.arange(10) / 10 y = (x + 0.1)**2

plt.errorbar(x, y, xerr=0.1, xlolims=True, label=‘xlolims=True’) y = (x + 0.1)**3

plt.errorbar(x + 0.6, y, xerr=0.1, xuplims=upperlimits, xlolims=lowerlimits, label=‘subsets of xuplims and xlolims’)

y = (x + 0.1)**4 plt.errorbar(x + 1.2, y, xerr=0.1, xuplims=True, label=‘xuplims=True’)

plt.legend() plt.show()

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn