Matplotlib - annotate 标注备注信息

在前面博客中我们一起做了一个sincos的图例,大致内容是这样的。
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提供箭头属性字典

这里着重讲解一下xycoordstestcoordsarrowprops 参数

xy(箭头尖端) 和 xytext位置(文本位置) 都以数据坐标为单位,并且有多种可以选择的其他坐标系 - 你可以使用xycoordstextcoords(默认为data) 指定xyxytext的坐标系。
可以通过在可选关键字参数arrowprops中提供箭头属性字典来绘制从文本到注释点的箭头。
  • xycoordstextcoords
参数坐标系
figure points距离图形左下角的点数量
figure pixels距离图形左下角的像素数量
figure fraction0,0 是图形左下角,1,1 是右上角
axes points距离轴域左下角的点数量
axes pixels距离轴域左下角的像素数量
axes fraction0,0 是轴域左下角,1,1 是右上角
data使用轴域数据坐标系
  • arrowprops
arrowprops键描述
width箭头宽度,以点为单位
frac箭头头部所占据的比例
headwidth箭头的底部的宽度,以点为单位
shrink移动提示,并使其离注释点和文本一些距离
**kwargsmatplotlib.patches.Polygon的任何键,例如facecolor
  • matplotlib提供的箭头有一下几种
    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的参数还有更多的用法,有时间继续探索。。。

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值