在前面博客中我们一起做了一个sin
、cos
的图例,大致内容是这样的。
可以清楚的看到,我们的两个星星的点。
现在,我们要给这两个点增加一些备注信息,该如何来做呢?
那么就用到了 annotate
其实我们基本的标注会用到text()
函数,使用text()
会将文本放置在轴域的任意位置,而文本的一个常见用例是标注绘图的某些特征,恰恰annotate()
方法提供辅助函数。
接下来,我们就来看一下annotate
的参数都有哪些
-====================================-
from matplotlib import pyplot as plt
plt.annotate(
备注文本,
xy,
xycoords,
xytext,
textcoords,
fontsize,
arrowprops)
解释一下参数的作用
参数 | 作用 |
---|---|
备注文本 | 顾名思义,指明要添加的具体的备注文本信息 |
xy | 指明具体的要添加备注信息的点的坐标 |
xycoords | 指定目标坐标的坐标系 |
xytext | 备注文本的坐标 |
textcoords | 备注文本坐标的坐标系 |
fonsize | 字体大小 |
arrowprops | 提供箭头属性字典 |
这里着重讲解一下xycoords
、testcoords
和arrowprops
参数
xy
(箭头尖端) 和 xytext
位置(文本位置) 都以数据坐标为单位,并且有多种可以选择的其他坐标系 - 你可以使用xycoords
和textcoords
(默认为data) 指定xy
和xytext
的坐标系。
可以通过在可选关键字参数arrowprops
中提供箭头属性字典来绘制从文本到注释点的箭头。
xycoords
、textcoords
参数 | 坐标系 |
---|---|
figure points | 距离图形左下角的点数量 |
figure pixels | 距离图形左下角的像素数量 |
figure fraction | 0,0 是图形左下角,1,1 是右上角 |
axes points | 距离轴域左下角的点数量 |
axes pixels | 距离轴域左下角的像素数量 |
axes fraction | 0,0 是轴域左下角,1,1 是右上角 |
data | 使用轴域数据坐标系 |
arrowprops
arrowprops键 | 描述 |
---|---|
width | 箭头宽度,以点为单位 |
frac | 箭头头部所占据的比例 |
headwidth | 箭头的底部的宽度,以点为单位 |
shrink | 移动提示,并使其离注释点和文本一些距离 |
**kwargs | matplotlib.patches.Polygon的任何键,例如facecolor |
- matplotlib提供的箭头有一下几种
现在明白了这些参数的作用之后,我们来实际操作一下
#导入模块
import numpy as np
from matplotlib import pyplot as plt
#线性分隔,指定起始点,指定分隔线段距离
x = np.linspace(-np.pi, np.pi, 1000)
cos_y = np.cos(x) / 2
sin_y = np.sin(x)
#指定具体某个点的坐标
xo = np.pi * 3 / 4
yo_cos = np.cos(xo) / 2
yo_sin = np.sin(xo)
#设置x轴,y轴的坐标范围
plt.xlim(x.min() * 1.2, x.max() * 1.2)
plt.ylim(sin_y.min() * 1.2, sin_y.max() * 1.2)
#设置x轴的刻度
plt.xticks([-np.pi, -np.pi / 2, 0,
np.pi / 2, np.pi * 3 / 4, np.pi],
[r'$-\pi$', r'$-\frac{\pi}{2}$', r'$0$',
r'$\frac{\pi}{2}$', r'$\frac{3\pi}{4}$',
r'$\pi$'])
#设置y轴的刻度
plt.yticks([-1, -0.5, 0.5, 1])
#获取当前坐标轴
ax = plt.gca()
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#画图
plt.plot(x, cos_y, linestyle='--', linewidth=1,
color='red', label=r'$y=\frac{1}{2}cos(x)$')
plt.plot(x, sin_y, linestyle=':', linewidth=3,
color='green', label=r'$y=sin(x)$')
plt.plot([xo, xo], [yo_cos, yo_sin], linewidth=0.5,
color='dodgerblue')
#标点
plt.scatter([xo, xo], [yo_cos, yo_sin], marker='*',
s=120, edgecolor='dodgerblue',
facecolor='white', zorder=3)
#设置备注信息
plt.annotate(
#备注文本
r'$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$',
#x轴、y轴的刻度信息
xy=(xo, yo_cos),
#使用轴域数据坐标系
xycoords='data',
#设置文本坐标
xytext=(-90, -40),
#设置文本坐标系,offset points表示文字与箭头的相对位置保持不变
textcoords='offset points',
#设置字体大小
fontsize=14,
#描述箭头样式
arrowprops=dict(arrowstyle='->',
connectionstyle='arc3, rad=.2'))
plt.annotate(
r'$sin(\frac{3\pi}{4})=\frac{\sqrt{2}}{2}$',
xy=(xo, yo_sin), xycoords='data',
xytext=(20, 20), textcoords='offset points',
fontsize=14,
arrowprops=dict(arrowstyle='->',
connectionstyle='arc3, rad=.2'))
# plt.legend(loc='lower right')
#展示图例
plt.legend()
#保存
plt.savefig("路径")
效果图
当然这仅仅是我们一个小的案例,annotate的参数还有更多的用法,有时间继续探索。。。
完。