Python-Matplotlib绘图教程之Annotations

时间:2022-12-21 09:51:39

声明:

  1. 翻译自官方文档
  2. 并非直译
  3. 在一些官方代码中去掉了不重要的部分

Annotations

Annotation,意为“注释”。本文将依照matplotlib官方文档,摘取Annotation章节中的常用部分,结合实例予以介绍。

Annotation基础

matplotlib中的text()函数可以在坐标轴(Axes)中的指定位置添加文字。文字一般是用来解释图形的,在matplotlib中annotate()经常和text()结合使用,注释中既包括标注(如指示箭头),又包括文字,如下图所示。因此,在添加一个注释时,我们至少考虑两点:

  • 标注的位置 xy,是一个二维元组,形如(2, 3)。
  • 文字的位置 xytext,是一个二维元组。

Python-Matplotlib绘图教程之Annotations

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
t = np.arange(0., 5., 0.01)
s = np.cos(2 * np.pi * t)
ax.plot(t, s, lw=2)  # lw表示线条宽度

ax.annotate('local max', xy=(2, 1), 
             xytext=(3, 1.5), 
             arrowprops={facecolor: 'black'})

ax.set_ylim(-2, 2)
plt.show()

在上面的例子中,xyxytext的坐标系被称为data coordinate,这是xy默认的参考系(参数是xycoords),而xytext的参考系(参数是textcoords)默认与xy相同。坐标系参数值如下表:

参数值 坐标系
‘figure points’ 以图片为坐标系,左下角数值低
‘figure pixels’ 同上,区别是points和pixels,实际看不出什么差距
‘figure fraction’ 以图片为坐标系,数值是图片大小的比例,(0, 0)表示坐下,(1, 1)表示右上
‘axes points’ 以坐标轴为参考系,…
‘axes pixels’ 以坐标轴为参考系, …
‘axes fraction 以坐标轴为参考系, …
‘data’ 使用坐标轴上的数据点,常用!例如上图中标注位置(2, 1)对应横坐标值为2,纵坐标值为1

例如,我们将文字的参考系改为axes fraction的,即:

ax.annotate('local max', xy=(3, 1), 
             xycoords='data', xytext=(0.8, 0.95),
             textcoords='axes fraction', 
             arrowprops=dict(facecolor='black'))

正如上面例子所示,用参数arrowprops来设置标注箭头的属性,该参数的值是一个字典(字典的键是属性名,值是属性值),相关属性如下表所示:

属性名 介绍
width 箭头的宽度
frac 箭头长度的比例
headwidth 箭头头部的宽度
shrink 标注位置到文字的比例
**kwargs 等等