# 添加参考线和参考区域

# 添加参考线

# 参考线是一条或多条贯穿绘图区域的线条,用于为绘图区域中图形数据之间的比较提供参考依据,常见于财务分析、经营分析中,例如目标线、平均线、预算线等。参考线按方向的不同可分为水平参考线和垂直参考线。matplotlib 中提供了 axhline() 和 axvline() 函数,分别用于添加水平参考线和垂直参考线,具体介绍如下。

# 使用 axhline() 绘制水平参考线

# axhline() 函数的语法格式如下所示:

axhline(y=0, xmin=0, xmax=l, linestyle='-', **kwargs)

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

# · y :表示水平参考线的纵坐标。
· xmin :表示水平参考线的起始位置,默认为 0。
· xmax :表示水平参考线的终止位置,默认为 1。
· linestyle:表示水平参考线的类型,默认为实线。

# 使用 axvline() 绘制垂直参考线

# axvline() 函数的语法格式如下所示:

axvline(x=0, ymin=0, ymax=l, linestyle='-', **kwargs)

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

# · x :表示垂直参考线的横坐标。
· ymin :表示垂直参考线的起始位置,默认为 0。
· ymax :表示垂直参考线的终止位置,默认为 1。
· linestyle :表示垂直参考线的类型,默认为实线。

# 在 3.4.1 节绘制的正弦和余弦曲线图中添加参考线,增加的代码如下。

# 添加参考线
plt.axvline(x=0, linestyle='--')
plt.axhline(y=0, linestyle='--')

# 上述代码通过 linestyle 参数将参考线的类型设为虚线,避免了参考线与曲线混淆,关于线条的类型会在第 4 章进行介绍。
运行程序,效果如图 3-11 所示。

image

# 添加参考区域

# pyplot 模块中提供了 axhspan() 和 axvspan() 函数,分别用于为图表添加水平参考区域和垂直参考区域,具体介绍如下。

# 使用 axhspan() 绘制水平参考区域

# axhspan() 函数的语法格式如下所示 :

axhspan(ymin, ymax, xmin=0, xmax=l, **kwargs)

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

# · ymin :表示水平跨度的下限,以数据为单位。
· ymax :表示水平跨度的上限,以数据为单位。
· xmin :表示垂直跨度的下限,以轴为单位,默认为 0。
· xmax :表示垂直跨度的上限,以轴为单位,默认为 1。

# 使用 axvspan() 绘制垂直参考区域

# axvspan() 函数的语法格式如下所示:

axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs)

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

# · xmin :表示垂直跨度的下限。
· xmax :表示垂直跨度的上限。

# 在 3.5.1 节绘制的正弦和余弦曲线图中添加参考区域,增加的代码如下。

# 添加参考区域
plt.axvspan(xmin=0.5, xmax=2.0, alpha=0.3)
plt.axhspan(ymin=0.5, ymax=1.0, alpha=0.3)

# 运行程序,效果如图 3-12 所示。

image

# 实例4:全校高二年级各班男女生英语成绩评估

# 某高中高二年级期中模拟考试后,学校对该年级各班各学科的平均成绩进行统计,计算出全体高二年级的英语平均成绩为 88.5, 其中高二各班男生、女生的英语平均成绩如表 3-3 所示。

image

image

# 根据表 3-3 的数据,将“班级名称”一列的数据作为 x 轴的刻度标签,将“男生”和“女生”两列的数据作为刻度标签对应的数值,使用 bar() 绘制各班级男生、女生英语平均成绩的柱形图,并将高二年级的英语平均成绩作为参考线,比较哪些班级的英语成绩有待提高,具体代码如下。

In [5]:
# 04_average_score__of_english
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
men_means = (90.5, 89.5, 88.7, 88.5, 85.2, 86.6)
women_means = (92.7, 87.0, 90.5, 85.0, 89.5, 89.8)
ind = np.arange(len(men_means))  # 每组柱形的 x 位置
width = 0.2                      # 各柱形的宽度
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(ind - width / 2, men_means, width, label='男生平均成绩')
ax.bar(ind + 0.2, women_means, width, label='女生平均成绩 ')
ax.set_title('高二各班男生、女生英语平均成绩')
ax.set_ylabel('分数')
ax.set_xticks(ind) 
ax.set_xticklabels(['高二1班', '高二2班', '高二3班', '高二4班',I
                    '高二5班', '高二6班'])
# 添加参考线
ax.axhline(88.5, ls='--', linewidth=1.0, labels='全体平均成绩')
ax.legend(loc="lower right")
plt.show()

# 运行程序,效果如图 3-13 所示。

image

# 图 3-13 中,蓝色的虚线代表高二年级的英语平均成绩。由图 3-13 可知,高二2班、4班女生和5班、6班男生的平均成绩均低于高二年级的英语平均成绩。