Matplotlib - 处理文本
Matplotlib - 处理文本
Section titled “Matplotlib - 处理文本”Matplotlib 提供了全面的文本支持,使您能够为绘图添加标签(labels)、标题(titles)、注释(annotations)和数学表达式。它支持各种字体、Unicode 字符和文本布局。
您可以精细控制文本属性(properties),如字体大小(font size)、粗细(weight)、颜色(color)、旋转(rotation)、对齐(alignment)和位置(position)。Matplotlib 还包含一个强大的引擎,用于使用 TeX 标记(markup)的子集渲染数学表达式。
常用文本函数(面向对象 API)
Section titled “常用文本函数(面向对象 API)”在使用推荐的面向对象方法时,您通常会在 Axes 或 Figure 对象上调用与文本相关的方法:
| 方法 (Method) | 描述 (Description) |
|---|---|
ax.set_title() | 设置 Axes 的标题。 |
ax.set_xlabel() | 设置 Axes 的 x 轴标签。 |
ax.set_ylabel() | 设置 Axes 的 y 轴标签。 |
ax.text() | 在 Axes 坐标内的任意位置添加文本。 |
ax.annotate() | 在 Axes 的特定点添加注释(文本和可选的箭头)。 |
fig.suptitle() | 为整个 Figure 添加一个居中的总标题。 |
fig.text() | 在 Figure 坐标内的任意位置添加文本。 |
所有这些函数都返回一个 matplotlib.text.Text 对象,允许在创建后进行进一步的自定义。
此脚本演示了如何在面向对象 API 中使用各种文本函数:
import matplotlib.pyplot as pltimport numpy as np
# 准备数据x = np.linspace(0, 10, 100)y = np.sin(x)
# 创建 Figure 和 Axesfig, ax = plt.subplots(figsize=(8, 6))
# 绘制数据ax.plot(x, y, label='sin(x)')
# --- 添加文本元素 ---
# 标题和标签ax.set_title('带有各种文本元素的绘图', fontsize=16)ax.set_xlabel('X轴值', fontsize=12)ax.set_ylabel('Y轴值', fontsize=12)
# 使用数据坐标的简单文本ax.text(1, 0.8, '简单文本位于 (1, 0.8)', fontsize=10)
# 带有背景框和样式的文本ax.text(3, -0.5, '样式化文本', style='italic', fontsize=12, bbox={'facecolor': 'lightblue', 'alpha': 0.5, 'pad': 5})
# 数学表达式(使用 TeX)ax.text(6, 0.5, r'Equation: $E = mc^2$', fontsize=14, color='green')
# 使用 Axes 坐标的文本 (0,0 是左下角, 1,1 是右上角)ax.text(0.05, 0.95, '左上角 (Axes 坐标)', transform=ax.transAxes, # 指定坐标系 verticalalignment='top', fontsize=10)
# 指向特定数据点的注释point_x = x[50]point_y = y[50]ax.plot(point_x, point_y, 'ro') # 标记点ax.annotate('此处添加注释', xy=(point_x, point_y), xytext=(point_x + 1, point_y + 0.3), arrowprops=dict(facecolor='black', shrink=0.05, width=1, headwidth=8))
# --- 最后润色 ---ax.legend()ax.grid(True, linestyle='--', alpha=0.6)ax.axis([0, 10, -1.2, 1.2]) # 设置略宽的轴范围
plt.tight_layout() # 调整布局plt.show()此代码将生成一个正弦波图,其中包含各种文本元素:一个主标题、轴标签、使用数据坐标放置的文本、带有背景框的样式化文本、使用 TeX 渲染的数学公式、相对于 Axes 边界定位的文本,以及指向特定数据点并带有箭头的注释。
文本放置的关键点:
Section titled “文本放置的关键点:”- 数据坐标 (Data Coordinates): 默认情况下,
ax.text()使用与您的绘制数据相同的坐标系。 - Axes 坐标 (Axes Coordinates): 使用
transform=ax.transAxes进行相对于 Axes 边界框(bounding box)的放置 (0,0 是左下角,1,1 是右上角)。对于角落等固定位置的文本非常有用。 - Figure 坐标 (Figure Coordinates): 使用
transform=fig.transFigure进行相对于整个 Figure 画布的放置。 - 注释 (Annotations):
ax.annotate()是用于标记特定特征的强大工具,它会根据xy(要注释的点)和xytext(文本位置)自动处理文本和箭头的放置。