【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
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn