文章目录
- 1.应用场景——定量数据的误差范围
- 2.带误差棒的柱状图
- 3.带误差棒的条形图
- 4.带误差棒的多数据并列柱状图
- 5.带误差棒的堆积柱状图
在很多科学实验中都存在测量误差或是试验误差,这是无法控制的客观因素。这样,在可视化结果的时候,最好可以给实验结果增加观测结果的误差以表示客观存在的测量偏差。误差棒图就是可以用在这一场景中的很理想的统计图形。
1.应用场景——定量数据的误差范围
通过抽样获得样本,对总体参数进行估计会由于样本的随机性导致参数估计值出现波动,因此需要用误差置信区间来表示对总体参数估计的可靠范围。误差棒就可以很好地实现充当总体参数估计的置信区间的角色。误差棒的计算方法可以有很多种:单一数值、置信区间、标准差和标准误差等。误差棒的可视化展示效果也有很多种样式:水平误差棒、垂直误差棒、对称误差棒、非对称误差棒等。
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.1,0.6,10)
y = np.exp(x)
error = 0.05+0.15*x
lower_error = error
upper_error = 0.3*error
error_limit = [lower_error,upper_error]
plt.errorbar(x,y,yerr=error_limit,fmt=":o",
ecolor="y",elinewidth=4,
ms=5,mfc="c",mec="r",
capthick=1,capsize=2)
plt.xlim(0,0.7)
plt.show()
errorbar()参数含义如下:
x,y:数据点的位置
yeer:单一数值的非对称形式误差范围
fmt:数据点的标记样式和数据点标记的连接线样式
ecolor:误差棒的线条颜色
elinewidth:误差棒的线条粗细
ms:数据点的大小
mfc:数据点的标记颜色
mec:数据点的标记边缘颜色
capthick:误差棒边界横杆的厚度
capsize:误差棒边界横杆的大小
函数errorbar()里的关键字参数yerr使用了误差范围的非对称形式,而且是数据点下方的误差范围大于数据点上方的误差范围。关键字参数xerr也可以使用类似的误差范围,关键字参数fmt如果取“none”值时,数据点的连线、数据点的标记样式和颜色都不显示。
关键字参数capthick也可以用关键字参数mew代替。
2.带误差棒的柱状图
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["FangSong"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y = [100,68,79,91,82]
std_err = [7,2,6,10,5]
error_attri = dict(elinewidth=2,ecolor="black",capsize=3)
# create bar with errorbar
plt.bar(x,y,
color="c",
width=0.6,
align="center",
yerr=std_err,
error_kw=error_attri,
tick_label=["园区1","园区2","园区3","园区4","园区5"])
# set x,y_axis label
plt.xlabel("芒果种植园区")
plt.ylabel("收割量")
# set title of axes
plt.title("不同芒果种植区的单词收割量")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
plt.show()
3.带误差棒的条形图
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["FangSong"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y = [1200,2400,1800,2200,1600]
std_err = [150,100,180,130,80]
bar_width = 0.6
colors = ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"]
# create bar with errorbar
plt.barh(x,y,
bar_width,
color = colors,
align="center",
xerr=std_err,
tick_label=["家庭","小说","心理","科技","儿童"])
# set x,y_axis label
plt.xlabel("订购数量")
plt.ylabel("图书种类")
# set title
plt.title("大型图书展销会的不同图书种类的采购情况")
# set yaxis grid
plt.grid(True,axis="x",ls=":",color="gray",alpha=0.2)
plt.xlim(0,2600)
plt.show()
4.带误差棒的多数据并列柱状图
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["FangSong"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y1 = [100,68,79,91,82]
y2 = [120,75,70,78,85]
std_err1 = [7,2,6,10,5]
std_err2 = [5,1,4,8,9]
error_attri = dict(elinewidth=2,ecolor="black",capsize=3)
bar_width = 0.4
tick_label = ["园区1","园区2","园区3","园区4","园区5"]
# create bar with errorbar
plt.bar(x,y1,
bar_width,
color="#87CEEB",
align="center",
yerr=std_err1,
error_kw=error_attri,
label="2010")
plt.bar(x+bar_width,y2,
bar_width,
color="#CD5C5C",
align="center",
yerr=std_err2,
error_kw=error_attri,
label="2013")
# set x,y_axis label
plt.xlabel("芒果种植区")
plt.ylabel("收割量")
# set xaxis tick_label
plt.xticks(x+bar_width/2,tick_label)
# set title of axes
plt.title("不同年份的芒果种植区的单次收割量")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
plt.legend()
plt.show()
5.带误差棒的堆积柱状图
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["FangSong"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y1 = [1200,2400,1800,2200,1600]
y2 = [1050,2100,1300,1600,1340]
std_err1 = [150,100,180,130,80]
std_err2 = [120,110,170,150,120]
bar_width = 0.6
tick_label = ["家庭","小说","心理","科技","儿童"]
error_attri = dict(elinewidth=2,ecolor="black",capsize=0)
# create bar
plt.bar(x,y1,
bar_width,
color="#6495ED",
align="center",
yerr=std_err1,
error_kw=error_attri,
label="地区1")
plt.bar(x,y2,
bar_width,
bottom=y1,
color="#EFA500",
align="center",
yerr=std_err2,
error_kw=error_attri,
label="地区2")
# set x,y_axis label
plt.xlabel("图书种类")
plt.ylabel("订购数量")
# set title
plt.title("不同地区大型图书馆展销会的图书采购情况")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
plt.xticks(x,tick_label)
plt.legend()
plt.show()