如何在 Matplotlib 中使用数据坐标系外的注释?

如何在 Matplotlib 中使用数据坐标系外的注释?

在使用 Matplotlib 进行数据可视化时,有时候我们需要在图表中添加一些注释信息,比如线性回归方程、数据标签、文字说明等,这些注释信息既要清晰明了,又要不影响图表本身。Matplotlib 提供了多种注释工具,本篇文章将重点介绍如何在数据坐标系外添加注释。

效果演示

为了方便演示,我们首先生成一些数据。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x) + 1.5 * np.cos(2 * x)

接下来,我们将画出一张简单的折线图,并在图中添加注释信息。

fig, ax = plt.subplots()
ax.plot(x, y)

# 在坐标系外添加注释
ax.text(0.5, 1.05, '这是一条折线图', transform=ax.transAxes,
        ha='center', va='bottom', fontsize=14, color='blue')
ax.text(0.1, 0.95, '最大值为 {:.2f}'.format(np.max(y)), transform=ax.transAxes,
        ha='left', va='top', fontsize=12, color='red')
ax.text(0.9, 0.05, '最小值为 {:.2f}'.format(np.min(y)), transform=ax.transAxes,
        ha='right', va='bottom', fontsize=12, color='green')

plt.show()

注释信息分别放置在坐标系外的不同位置。我们可以看到,Matplotlib 提供了多种方式来控制注释的位置和形式。

transform 参数

在添加注释时,我们需要指定注释的位置。Matplotlib 中提供的 text() 函数有一个 transform 参数,我们可以通过该参数来指定注释的坐标系。如上面的示例代码中,我们使用了 ax.transAxes,这是一个坐标系变换对象,它将注释的坐标系变换为坐标系轴的比例。

另外,Matplotlib 还提供了其他的坐标系变换对象,如 ax.transData(坐标系变换为数据坐标系)、ax.transAxes(坐标系变换为坐标系轴的比例)、ax.transFigure(坐标系变换为图的大小)、ax.transAxes(坐标系变换为坐标轴上下限)等等。我们可以根据需要来选择不同的坐标系变换对象。

ha 和 va 参数

在注释信息中,我们还可以通过 hava 参数来指定水平和垂直对齐方式。具体参数如下:

  • ha:horizontal alignment,可选值包括 'center''left''right',分别表示水平居中、左对齐和右对齐。
  • va:vertical alignment,可选值包括 'center''top''bottom',分别表示垂直居中、顶对齐和底对齐。

完整示例

下面是一个更加完整的示例,展示了如何在坐标系外添加多个注释信息。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x) + 1.5 * np.cos(2 * x)

fig, ax = plt.subplots()
ax.plot(x, y)

# 在坐标系外添加注释
ax.text(0.5, 1.05, '这是一条折线图', transform=ax.transAxes, ha='center', va='bottom', fontsize=14, color='blue')
ax.text(0.1, 0.95, '最大值为 {:.2f}'.format(np.max(y)), transform=ax.transAxes, ha='left', va='top', fontsize=12, color='red')
ax.text(0.9, 0.05, '最小值为 {:.2f}'.format(np.min(y)), transform=ax.transAxes, ha='right', va='bottom', fontsize=12, color='green')
ax.text(x[60], y[60]-0.2, '这是一个数据点', fontsize=12, color='black', bbox=dict(facecolor='white', edgecolor='gray', alpha=0.5))

# 设置注释线
xy = (x[70], y[70])
xytext = (x[70], 1.5)
ax.annotate('这是一条注释线', xy=xy, xytext=xytext, fontsize=12,
            arrowprops=dict(facecolor='black', width=1, headwidth=6))

plt.show()

可以看到,在坐标系外添加注释信息还有以下几个方式:

  • 在数据坐标系中添加注释信息;
  • 添加注释线,将一段文字和一个点用带箭头的线连接起来;
  • 添加一个带边框和背景颜色的注释框。

结论

本篇文章介绍了如何在 Matplotlib 中使用数据坐标系外的注释,主要包括 text() 函数和 annotate() 函数的使用。在注释信息中,我们还可以通过其他参数进行样式调整。希望这篇文章能够帮助大家更好地掌握 Matplotlib 的注释功能。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程