图表的辅助元素是指除根据数据绘制的图形之外的元素,常用的辅助元素包括坐标轴、标题、图例、网格、参考线、参考区域、注释文本和表格,都可以对图形进行补充说明。
坐标轴由刻度标签、刻度线(主刻度线和次刻度线)、轴脊和坐标轴标签组成
设置坐标轴的标签、刻度范围和刻度标签
设置x轴的标签
xlabel(xlabel,fontdict=None,labelpad=None,**kwards)
xlabel:表示x轴标签的文本
fontdict:表示控制标签文本样式的字典
labelpad:表示标签与坐标轴边框(包括刻度和刻度标签)的距离
此外,Axes对象使用set_xlabel()方法也可以设置x轴的标签
设置y轴标签使用pyplot模块中的ylabel ()函数设置,语法格式和xlabel()一样
设置刻度范围
xlim(left=None,right=None,emit=True,auto=Flase,*,xmin=None,xmax= None)
left:表示x轴刻度取值范围的左位数
right:表示x轴刻度取值范围的右位数
emit:表示是否通知限制变化的观察者,默认为True
auto:表示是否允许自动缩放x轴,默认为True
xmin:表示x轴刻度的最小值
xmax:表示x轴刻度的最大值
此外,Axes对象可以使用set_xlim()和set_ylim()方法分别设置x轴和y轴的刻度范围
设置刻度标签
xticks(ticks=None, labels=None, **kwargs)
ticks:刻度显示的位置列表,它还可以设为空列表,以此禁用x轴的刻度
labels:指定位置刻度的刻度列表
此外,Axes对象可以使用set_xticks()或set_yticks()方法分别设置x轴或y轴的刻度线位置,使用set_xticklabels()或set_yticklabels()方法分别设置x轴或y轴的刻度标签。
添加标题和图例
添加标题
使用pyplot模块的title()函数可添加图表标题,该函数语法格式如下:
title(label, fontdict=None, loc='center', pad=None, **kwargs)
label:表示标题的文本。
fontdict:表示控制标题文本样式的字典。
loc:表示标题的对齐样式,包括‘left’,‘right’和‘center’三种取值,默认值为‘center’,即居中显示标题。
pad:表示标题与图表顶部的距离,默认为None。
此外,Axes 对象还可以使用set_title()方法添加图表的标题。
添加图例
使用pyplot模块的legend()函数可添加图例,该函数语法格式如下:
legend(handles, labels, loc, bbox_to_anchor, ncol, title, shadow, fancybox, *args, **kwargs)
handles和labels参数:handles参数表示由图形构成的列表,labels参数表示由图例项构成的列表。需要注意的是,handles和labels参数应接收相同长度的列表,若接收的列表长度不同,则会对较长的列表进行截断处理,使较长列表与较短列表长度相等。
loc参数:loc参数用于控制图例在图表中的位置,该参数支持字符串和数值两种形式的取值
bbox_to_anchor参数:用于控制图例的布局,该参数接收一个包含两个数值的元组,其中第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右;第二个数值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上。
ncol参数:表示图例的列数,默认值为1。
title参数:表示图例的标题,默认值为None。
shadow参数:控制是否在图例后面显示阴影,默认值为None。
fancybox参数:控制是否为图例设置圆角边框,默认值为None。
显示网格
网格是从刻度线开始延伸,贯穿至整个绘图区域的辅助线条,它能帮助人们轻松地查看图形的数值。matplotlib中可以直接使用pyplot模块中的grid()函数显示网格。
grid(b=None, which='major', axis='both', **kwargs)
b:表示是否显示网格。若提供其他关键字参数,则b参数设为Ture
which:表示显示网格的类型,支持major(主刻度线)、minor(次刻度线)、both这3种类型,默认为major。
axis:表示显示哪个方向的网格,该参数支持both、x和y这三个选项,默认为both。
linewidth或lw:表示网格线宽度。
此外,还可以使用Axes对象的grid()方法显示网格。需要说明的是,坐标轴若没有刻度,就无法显示网格。
添加参考线和参考区域
添加参考线
参考线是一条或多条贯穿绘图区域的线条,用于为绘图区域中图形数据之间的比较提供参考依据,按方向不同可分为水平参考线和垂直参考线,matplotlib中提供了axhline()和axvline()函数,分别用于添加水平参考线和垂直参考线
axhline(y=0,xmin=0,xmax=0,linestyle='-',**kwargs)
y:表示水平参考线的纵坐标
xmin:表示水平参考线的起始位置,默认为0
xmax:表示垂直参考线的终止位置,默认为1
linestyle:表示水平参考线的类型,默认为实线
axvline()函数绘制垂直参考线与axhline()用法类似
添加参考区域
pyplot模块中提供了axhspan()和axvspan()函数,分别用于为图表添加水平参考区域和垂直参考区域
axhspan(ymin,ymax,xmin=0,xmax=1,**kwargs)
ymin:表示水平跨度的下限,以数据为单位。
ymax:表示水平跨度的上限,以数据为单位。
xmin:表示垂直跨度的下限,以轴为单位,默认为0。
xmax:表示垂直跨度的上限,以轴为单位,默认为1。
alpha:可设置透明度,取值范围[0,1],0为透明,1为不透明,默认值为None
axhspan()绘制垂直参考区域与其类似。
添加注释文本
添加指向型注释文本
指向型注释文本是指通过指示箭头的注释方式对绘图区域的图形进行解释的文本,它一般使用线条连接说明点和箭头指向的注释文字,pyplot模块中提供了annotate()函数为图表添加指向型注释文本
annotate(s,xy,*args,**kwargs)
s:表示注释文本的内容。
xy:表示被注释的点的坐标位置,接收元组(x,y)。
xytext:表示注释文本所在的坐标位置,接收元组(x, y)。
xycoords:表示xy的坐标系统,默认值为“data”,代表与折线图使用相同的坐标系统。
arrowprops:表示指示箭头的属性字典。
bbox:表示注释文本的边框属性字典。
arrowprops参数接收一个包含若干键的字典,通过向字典中添加键值对来控制箭头的显示。常见的控制箭头的键包括width、headwidth、headlength、shrink、arrowstyle等,其中键arrowstyle代表箭头的类型。
添加无指向型注释文本
是指仅用文字的注释方式对绘图区域的图形进行说明的文本,pyplot模块中提供了text()函数为图表添加无指向型注释文本。
text(x, y,s, fontdict=None, withdash=<deprecated parameter>,**kwargs)
x,y:表示注释文本的位置。
s:表示注释文本的内容。
fontdict:表示控制字体的字典。
bbox:表示注释文本的边框属性字典。
horizontalalignment或ha:表示水平对齐的方式,可以取值为center、right或left。
verticalalignment或va:表示垂直对齐的方式,可以取值为center、top、bottom、baseline或center_baseline。
添加表格
将图表与数据表格结合使用便于用户从多元分析的角度深入挖掘数据潜在的含义,使用数据表格强调图表某部分的数值,matplotlib中提供了为图表添加数据表格的函数table()
table(cellText=None, cellColours=None, cellLoc='right', colWidths=None,
rowLabels=None,rowColours=None,rowLoc='left',colLabels=None
colColours=None, colLoc='center', loc='bottom', bbox=None,
edges='closed',**kwargs)
cellText:表示表格单元格中的数据,是一个二维列表。
cellColours:表示单元格的背景颜色。
cellLoc:表示单元格文本的对齐方式,支持left'、'right'和'center'三种取值,默认值为'right'。
colWidths:表示每列的宽度。
rowLabels:表示行标题的文本。
rowColours:表示行标题所在单元格的背景颜色。
rowLoc:表示行标题的对齐方式。
colLabels:表示列标题的文本。
colColours:表示列标题所在单元格的背景颜色。
colLoc:表示列标题的对齐方式。
loc:表示表格与绘图区域的对齐方式。
练习
import numpy as np
import matplotlib.pyplot as plt
#运行配置参数中的字体(font)为黑体(SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
#运行配置参数总的轴(axes)正常显示正负号(minus)
plt.rcParams['axes.unicode_minus'] = False
#生成256个[-pai,pai]的等差数列
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
#为y1,y2赋值
y1,y2 = np.sin(x),np.cos(x)
plt.plot(x,y1,x,y2)
#设置x轴和y轴的标签
plt.xlabel("x轴")
plt.ylabel("y轴")
#刻画刻度取值范围,最小值前取1.5,最大值后取1.5
plt.xlim(x.min()*1.5,x.max()*1.5)
#设置x轴的刻度标签
#利用matplotlib中自带的mathtext引擎编写数学表达式
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r'$-\pi$', r'$-\pi/2$', 0, r'$\pi/2$', r'$\pi$'])
# 添加标题
plt.title("正弦曲线和余弦曲线")
#添加图例,shadow在图例后面显示阴影,fancybox为图例设置圆角边框,还可用title设置图例标题
lines = plt.plot(x,y1,x,y2)
plt.legend(lines,['正弦','余弦'],shadow = True,fancybox = True)
#添加网格
plt.grid(b = True,axis = 'y',linewidth = 0.3)
#添加水平和垂直参考线,在横纵坐标都为0的位置添加
plt.axhline(y = 0,linestyle = '--')
plt.axvline(x = 0,linestyle = '--')
#添加参考区域,alpha表示透明度
plt.axvspan(xmin = 0.5,xmax = 2.0,alpha = 0.7)
plt.axhspan(ymin = 0.5,ymax = 1.0 ,alpha = 0.3)
#添加指向型注释文本
plt.annotate("最小值",xy = (-np.pi/2,-1.0),xytext = (-(np.pi/2),-0.5),arrowprops = dict(arrowstyle = "->"))
#添加无指向型注释文本
plt.text(3.20,0.10,"y = sin(x)",bbox = dict(alpha = 0.2))
plt.show()