# 绘制误差棒图

# 使用 errorbar() 绘制误差棒图

# 使用 pyplot 的 errorbar() 函数可以快速绘制误差棒图,errorbar() 函数的语法格式如下所示:

errorbar (x, y, yerr=None, xerr=None, fmt='', ecolor=None,
          elinewidth=None, capsize=None, barsabove=False, lolims=False,
          uplims=False, xlolims=False, xuplims=False, errorevery=l,
          capthick=None, *, data=None, **kwargs)

# 该函数常用参数的含义如下。

# · x, y :表示数据点的位置。
· xerr, yerr :表示数据的误差范围。
· fine :表示数据点的标记样式和数据点之间连接线的样式。
· ecolor :表示误差棒的线条颜色。
· elinewidth :表示误差棒的线条宽度。
· capsize :表示误差棒边界横杆的大小。
· capthick :表示误差棒边界横杆的厚度。

# 使用 errorbar() 函数绘制一个误差棒图,代码如下。

In [25]:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange (5)
y = (25, 32, 34, 20, 25)
y_offset = (3, 5, 2, 3, 3)
plt.errorbar(x, y, yerr=y_offset, capsize=3, capthick=2)
plt.show()

# 运行程序,效果如图 2-23 所示。

image

# 实例10:4个树种不同季节的细根生物量

# 细根生物量反映了根系从土壤中吸收水分和养分的能力,是植物地下部分碳汇集能力的重要体现。不同树种细根生物量存在差异性,各树种细根生物量在不同季节间差异较为明显。假设某大学分别于春季、夏季、秋季对马尾松、樟树、杉木、桂花 4 个树种进行观察,并记录了不同树种的细根生物量,具体如表 2-9 所示。

image

# 根据表 2-9 的数据,将“季节”一列的数据作为 x 轴的刻度标签,将其他列的数据作为 y 轴的数据,绘制马尾松、樟树、杉木、桂花的细根生物量的误差棒图,具体代码如下。

In [26]:
# 10_fine_root_biomass
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据
x = np.arange(3)
y1 = np.array([2.04, 1.57, 1.63])
y2 = np.array([1.69, 1.61, 1.64])
y3 = np.array([4.65, 4.99, 4.94])
y4 = np.array([3.39, 2.33, 4.10])
# 指定测量偏差
error1 = [0.16, 0.08, 0.10]
error2 = [0.27, 0.14, 0.14]
error3 = [0.34, 0.32, 0.29]
error4 = [0.23, 0.23, 0.39]
bar_width = 0.2
# 绘制柱形图
plt.bar(x, y1, bar_width)
plt.bar(x + bar_width, y2, bar_width, align="center",
        tick_label=["春季", "立季","秋季"])
plt,bdr(x + 2*bar_width, y3, bar_width)
plt.bar(x + 3*bar_width, y4, bar_width)
# 绘制误差棒:横杆大小为3, 线条宽度为3, 线条颜色为黑色,数据点标记为像素点
plt.errorbar(x, y1, yerr=error1, capsize=3, elinewidth=2, fmt='k,')
plt.errorbar(x + bar_width, y2, yerr=error2, capsize-3,
             elinewidth=2, fmt='k,')
plt.errorbar(x + 2*bat_width, y3, yerr=error3, capsize=3,
             elinewidth=2, fmt='k,')
plt.errorbar(x + 3*bar_width, y4, yerr=error4, capsize=3,
             elinewidth=2, fmt='k,')
plt.show()

# 运行程序,效果如图 2-24 所示。

image

# 图 2-24 中,x 轴代表季节,y 轴代表细根生物量,蓝色、橙色、绿色、红色的柱形依次代表马尾松、樟树、杉木、桂花,柱形上方的黑色短线代表误差棒。由图 2-24 可知,杉木的细根生物量最多,说明杉木吸收水分和养分的能力最强;樟树的细根生物量最少,说明樟树吸收水分和养分的能力最弱。

# 注意:

# 本章所介绍的简单图表(雷达图除外)除了可以使用 pyplot 模块的绘图函数绘制,还可以通过 Axes 类中与绘图函数同名的方法进行绘制。例如,pyplot 模块的 bar() 函数与 Axes 类的 bar() 方法都可以绘制柱形图,它们的参数几乎相同(self除外)。由于本章设计的实例相对比较简单,因此所有的实例都采用 pyplot 模块的绘制函数实现。