点击蓝字
关注我们
话说上节我们说到plt.annotate()函数的基本用法,本节继续说说它的进阶用法。
arrowprops属性
arrowprops属性表示箭头的样式,dict(字典)型数据,关键字“arrowstyle”常见的值有:

举两个例子:
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.family']=['KaiTi'] #设置中文字体plt.rcParams['axes.unicode_minus']=False #用来正常显示负号x=np.linspace(0,4*np.pi,100)y=np.sin(x)plt.plot(x,y)plt.annotate('最大值',xy=(np.pi/2,1),xytext=(4,0.9),arrowprops=dict(arrowstyle='<->'),color='r',fontsize=15)plt.annotate('最小值',xy=(3*np.pi/2,-1),xytext=(4.4,-0.75),arrowprops=dict(arrowstyle='-|>'),color='purple',fontsize=15)plt.show()

其它箭头的样式请各位根据以上代码修改。
以下关键字是在不设置“arrowstyle”关键字的情况下才能使用:
width:箭头的宽度(单位是点)
headwidth :箭头头部的宽度(点)
headlength: 箭头头部的长度(点)
shrink :箭头两端收缩的百分比(占总长)
比如以上代码第11行改为:
plt.annotate('最小值',xy=(3*np.pi/2,-1),xytext=(4.4,-0.5),arrowprops=dict(width=2,headwidth=10,headlength=20,shrink=10),color='r',fontsize=15)
结果是:(重点比较两个图中最小值的箭头)

xycoords属性与textcoords属性
xycoords属性用于设置文本的坐标系,一般使用默认值“data”,即与图像共用一个坐标系。
textcoords属性选择为相对于被注释点xy的偏移量,‘offset points’或者’offset pixels’(点偏移量或像素偏移量)。
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.family']=['KaiTi'] #设置中文字体data=[74,83,91,98,101]year=['2016','2017','2018','2019','2020']plt.plot(year,data,marker='o')plt.ylim(70,110)for xy in zip(year,data):plt.annotate('%s' % xy[1], xy=xy, xytext=(-10,13),xycoords='data', textcoords='offset points',fontsize=10)plt.title('十三五期间GDP增长趋势图(单位:万亿)',fontsize=18)plt.show()

第10-11行代码通过for循环将五年的GDP值显示在坐标系上,变量xy获取迭代对象zip(year,data)一个压缩后的元素,这个元素的类型是元组,元组第1个元素是年份,第2个元素是该年的GDP值,所以显示数据时使用xy[1],索引为1获取该年的GDP值。
第11行textcoords='offset points'的意思是将注释文本设置在圆点的相对点偏移量,偏移量由xytext=(-10,13)决定,也就是将该年的GDP值设置在相对于圆点偏左10个单位,偏上13个单位。
bbox属性
bbox属性用于设置注释文本的边框,字典类型,常用的关键字有:
boxstyle:方框外形
facecolor:(简写fc)背景颜色
edgecolor:(简写ec)边框线条颜色
edgewidth:边框线条大小
boxstyle常见的值如下:
Circle、DArrow、LArrow、RArrow、Round、Round4、Roundtooth、Sawtooth、Square
将以上GDP例子的代码改成以下形式:
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.family']=['KaiTi'] #设置中文字体data=[74,83,91,98,101]year=['2016','2017','2018','2019','2020']plt.plot(year,data,marker='o')plt.ylim(70,110)for xy in zip(year,data):plt.annotate('%s' % xy[1], xy=xy, xytext=(-10,13), textcoords='offset points',fontsize=10,bbox=dict(boxstyle='round4,pad=0.5', facecolor='y', edgecolor='red', linewidth=2, alpha=0.4))plt.title('十三五期间GDP增长趋势图(单位:万亿)',fontsize=18)plt.show()

第12行的意思是给各年的GDP值添加边框,用round4风格的边框,边框大小(pad)是0.5,前景色是黄色(y),边框颜色是红色,边框线条宽度为2,透明度0.4。
将第12行改为:
bbox=dict(boxstyle='Circle,pad=0.8', facecolor='grey', edgecolor='green', linewidth=2, alpha=0.3)

其它的边框样式请各位一一修改,在此不展开叙述。
小结
如果注释文本能适当地添加在图形中,可以使图形更美观,可读性更强。plt.text()函数与plt.annotate()函数的参数较多,要想更好地掌握其用法,只有上机多练习,别无它法。
THE END




