HOWTO · Matplotlib
在 Matplotlib 中的图中添加文字
本教程介绍如何使用 `matplotlib.pyplot.text()` 函数,在 Matplotlib 图表或坐标轴中的指定位置添加文字。
本页内容
使用 matplotlib.pyplot.text() 可以在 Matplotlib 图表中的指定位置添加标签或说明。该函数接收 x、y 坐标和要显示的字符串;可选参数用于控制文字外观。例如,plt.text(2, 20, "Peak point") 会在数据坐标 (2, 20) 处放置标签。使用坐标轴对象时,可以调用对应的 ax.text(2, 20, "Peak point")。示例中的标签 “Peak point” 保持英文。完整参数列表请参阅 pyplot.text() API 参考。
使用 matplotlib.pyplot.text() 在图表中添加文字
下面的示例绘制一条线,并在其中一个数据点处放置标签。它使用 pyplot 接口,并设置显示范围,使选定的坐标包含在图表中。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [10, 15, 25, 30]
plt.plot(x, y, marker="o")
plt.xlim(0, 5)
plt.ylim(0, 35)
plt.text(3, 25, "Peak point", fontsize=12, color="crimson")
plt.title("A labeled line plot")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
x 和 y 保存绘制的数据,函数调用会在坐标 (3, 25) 处放置 “Peak point”。两个范围设置调用会将该坐标纳入可见范围。示例中的标签保持英文。若脚本要创建多个图表,可使用 ax.text(x, y, label) 将文字附加到指定坐标轴,从而明确文字属于哪个图表。对于单个当前图表,使用 pyplot 调用会更方便。
使用数据坐标和坐标轴范围定位文字
默认情况下,text() 的 x 和 y 参数使用数据坐标。因此,位于 (3, 25) 的标签会跟随图中的这些数值,而不是按与某个角落之间的像素距离定位。当前的 x、y 轴范围决定数据坐标平面中哪些部分可见。如果指定位置超出这些范围,文字就会落在可见绘图区之外。可以用 plt.xlim() 和 plt.ylim() 设置合适的范围;使用坐标轴对象时,则可以调用 ax.set_xlim() 和 ax.set_ylim()。
选择位置时,应确保标签易于阅读且不会遮挡重要数据。如果希望说明文字无论数据值如何变化都固定在坐标轴区域的某个比例位置,可以通过 transform=ax.transAxes 使用轴坐标;(0, 0) 是坐标轴区域的左下角,(1, 1) 是右上角。这与默认的数据坐标不同,适合将说明固定在图表内部。
自定义文字外观
向 text() 传递关键字参数即可设置标签样式。fontsize 用于调整字号,color 设置颜色,fontweight="bold" 用于强调文字。将 rotation 设为所需角度可以旋转文字;使用 horizontalalignment(或 ha)和 verticalalignment(或 va)可以调整文字相对于 x、y 坐标的对齐方式。例如,ha="center" 和 va="bottom" 会让标签在数据点上方居中显示。
bbox 参数可在文字后添加背景,使标签与复杂的线条或标记区分开来。它接受一个包含图形属性的字典。下面这个简洁示例组合了对齐、强调、旋转和半透明白色背景:
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [2, 4, 3], marker="o")
ax.text(2, 4, "Peak", fontsize=12, color="crimson", fontweight="bold",
ha="center", va="bottom", rotation=15,
bbox={"facecolor": "white", "alpha": 0.8})
plt.close(fig)
例如,bbox={"facecolor": "white", "alpha": 0.8} 会创建半透明的白色背景。只使用有助于提升可读性的选项;若大范围使用,鲜艳的颜色、较大的字体或旋转可能会分散读者对数据的注意力。
添加注释和多行文字
如果说明需要指向某个特征,可以使用 plt.annotate()。它的 xy 参数指定所描述的数据点,xytext 则给出文字的位置。例如,plt.annotate("Peak", xy=(3, 25), xytext=(2, 30), arrowprops={"arrowstyle": "->"}) 会在数据点上方放置说明,并绘制指向该点的箭头。默认情况下,注释文字的位置也使用数据坐标;请设置范围,使目标点和说明文字都包含在可见区域内。使用坐标轴对象时,调用 ax.annotate() 可确保目标点和说明属于预期的图表。
若要添加多行说明,可在传递给 text() 的字符串中加入换行符,例如 "First line\nSecond line"。Matplotlib 会在指定位置将每一段文字显示为单独一行。多行标签适合提供简短说明;调整它的位置和对齐方式,使其保持在可见绘图区内并避免遮挡附近的数据。借助这些方法,可以添加标签、背景说明和指示箭头,同时让每条说明对应到它描述的坐标或特征。