在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中,添加文字和箭头的方式有多种,可以根据需要灵活选择。