3.5 Python 数据可视化——图表辅助元素的定制

3.5 添加参考线和参考区域

3.5.1 添加参考线
参考线是一条或多条贯穿绘图区域的线条,用于为绘图区域中图形数据之间的比较提供
参考依据,常见于财务分析、经营分析中,例如目标线、平均线、预算线等。参考线按方向
的不同可分为水平参考线和垂直参考线。matplotlib 中提供了 axhline() 和 axvline() 函数,分别
用于添加水平参考线和垂直参考线,具体介绍如下。
1.使用 axhline() 绘制水平参考线
axhline() 函数的语法格式如下所示 :
axhline(y=0, xmin=0, xmax=1, linestyle='-', ** kwargs)
该函数常用参数的含义如下。
·y :表示水平参考线的纵坐标。

·xmin :表示水平参考线的起始位置,默认为 0。

·xmax :表示水平参考线的终止位置,默认为 1。
·linestyle :表示水平参考线的类型,默认为实线。
2.使用 axvline() 绘制垂直参考线
axvline() 函数的语法格式如下所示 :
axvline(x=0, ymin=0, ymax=1, 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 所示。
3.5.2 添加参考区域
pyplot 模块中提供了 axhspan() 和 axvspan() 函数,分别用于为图表添加水平参考区域和垂
直参考区域,具体介绍如下。
1.使用 axhspan() 绘制水平参考区域
axhspan() 函数的语法格式如下所示 :
axhspan(ymin, ymax, xmin=0, xmax=1, ** kwargs)

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

·ymin :表示水平跨度的下限,以数据为单位。
·ymax :表示水平跨度的上限,以数据为单位。
·xmin :表示垂直跨度的下限,以轴为单位,默认为 0。
·xmax :表示垂直跨度的上限,以轴为单位,默认为 1。
2.使用 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 所示。
3.5.3 实例 4 :全校高二年级各班男女生英语成绩评估
某高中高二年级期中模拟考试后,学校对该年级各班各学科的平均成绩进行统计,计算出
全体高二年级的英语平均成绩为 88.5,其中高二各班男生、女生的英语平均成绩如表 3-3 所示。

根据表 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 ',
      ' 高二 5 ', ' 高二 6 '])
# 添加参考线
ax.axhline(88.5, ls='--', linewidth=1.0, label=' 全体平均成绩 ')
ax.legend(loc="lower right")
plt.show()
运行程序,效果如图 3-13 所示。
图 3-13 中,蓝色的虚线代表高二年级的英语平均成绩。由图 3-13 可知,高二 2 班、4
班女生和 5 班、6 班男生的平均成绩均低于高二年级的英语平均成绩。

猜你喜欢

转载自blog.csdn.net/qq_43416206/article/details/132262876