用箭头和文字来标记重要的点

时间:2022-07-24
本文章向大家介绍用箭头和文字来标记重要的点,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在matplotlib中,可以通过以下几种函数在图中添加箭头和文字标记

1. text,用于添加文字

2. arrow,用于添加箭头

3. annotate,支持同时添加文字和箭头

下面看下具体的用法

1.text

text函数通过指定xy轴坐标,以及对应的文字来实现文字标记的功能,基本用法如下

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.text(x=2, y=2, s='text')
>>> plt.show()

输出结果如下

为了更好的看出文字和坐标的关系,我在图中添加了水平和垂直方向的辅助线, 可以看到,文字的左下角对应的是我们提供的坐标,这个和R语言中默认的文字中心为点的坐标不一样。

文字和坐标的对齐方式可以通过以下两个参数进行调整

1. horizontalalignment, 简写为ha, 取值为left, center, right三者中的一种

2. verticalalignment,简写为va,取值为top, center, bottom,baseline, center_baseline中的一种

用法如下

>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.text(x=2, y=2, s='text', ha='center',va='bottom')
>>> plt.show()

输出结果如下

对于文字的颜色,大小,字体等常用属性,可以通过以下几个文字的通用参数进行设置

1. color, 文字的颜色

2. fontsize, 文字的大小

3. fontfamily, 字体

用法如下

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.text(x=2, y=2, s='text', color='red', fontsize=12, fontfamily='fantasy')
>>> plt.show()

输出结果如下

在matplotlib中,还可以通过bbox参数对文字的边框进行设置,该参数的取值为一个dict, 常用的key包括facecolor, edgecolor, boxstyle等,基本用法如下

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.text(x=2, y=2, s='text', bbox=dict(facecolor='white',boxstyle='circle'))
>>> plt.show()

输出结果如下

boxstyle有多种取值,更多的信息请查看官方的API文档。

2. arrow

arrow函数通过指定起始点的xy轴坐标和相对起始点的偏移量dx和dy来指定一个箭头标记,基本用法如下

>>> plt.plot([1,2,3,4])
>>> plt.arrow(x=1, y=1, dx=1.5, dy=1.5)

输出结果如下

控制箭头形状的常见参数如下

1. width, 指定整个箭头的宽度,默认值为0.001

2. head_width, 箭头头部的宽度,默认值为3*width

3. head_length,箭头头部的长度,默认值为1.5*head_width

4. shape, 箭头的样式,默认值为full, 取值范围包括full,left,right

箭头的线条样式,颜色等属性则可以通过以下几个通用参数来设置

1. linestyle,线条的样式

2. facecolor, 箭头的填充色

3. edgecolor,箭头的边框颜色

基本用法如下

>>> plt.plot([1,2,3,4])
>>> plt.arrow(x=1, y=1, dx=1.5, dy=1.5,width=0.001, head_width=0.1,fc='red')

输出结果如下

3. annotate

annotate既可以只提供文字标记,也可以同时提供文字和箭头两种标记,基本用法如下

>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.annotate(s='text', xy=(2,2))
>>> plt.show()

输出结果如下

可以看到,上述代码的效果和text函数的效果是相同的,而text函数中的一些属性在annotate中也是可以使用的,比如ha,va,bbox等参数。

在annotate函数中,可以通过xytext和textcoords参数来控制文字的位置,常见用法如下

>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.annotate(text='text', xy=(2,2), xytext=(0,5), textcoords='offset points')
>>> plt.show()

输出结果如下

textcoords取值为offset points时,xytext的值为text相对xy坐标的偏移量,通过这种方式,可以灵活设置文字的位置。

除了添加文字,该函数也支持添加箭头,基本用法如下

>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.annotate('text', (2,2), xytext=(20, 30),textcoords='offset points', arrowprops=dict(facecolor='black', shrink=0.05))
>>> plt.show()

输出结果如下

通过arrowprops参数来指定箭头的属性,该参数的值为dict,其中影响箭头样式核心参数为arrowstyle,不同arrowstyle取值对应的箭头样式 如下

最后来看一个上述参数相互结合的例子

>>> plt.plot([1,2,3,4])
>>> plt.axhline(2)
>>> plt.axvline(2)
>>> plt.annotate('text', (2,2), bbox=dict(boxstyle='round', fc='0.8'), xytext=(20, 30),textcoords='offset points', arrowprops=dict(facecolor='black', shrink=0.05))
>>> plt.show()

输出结果如下

在matplotlib中,添加文字和箭头的方式有多种,可以根据需要灵活选择。

·end·