使用ax.text和matplotlib将字体相对于坐标轴定位

6
我不确定如何在matplotlib中使用轴对象来相对定位字体。
示例:
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 4), dpi=100)
x = [1, 2]
y = [3, 4]

y_loc = 4.1
x_loc = 0.95
fs = 12
ax = axes[0]
ax.plot(x, y)
_ = ax.text(x=x_loc, y=y_loc, s="Plot 1", fontsize=fs)

ax = axes[1]
ax.plot(x, y)
_ = ax.text(x=x_loc, y=y_loc, s="Plot 2", fontsize=fs)

ax = axes[2]
_ = ax.plot(x, y)
_ = ax.text(x=x_loc, y=y_loc, s="Plot 3", fontsize=fs)

这将会产生:

在此输入图片描述

使用的数值:

y_loc = 4.1
x_loc = 0.95

让我想到应该有更好的方法来解决这个问题。
注意 - 我想在这里使用 ax.text,而不是title,问题主要是如何最佳地将文本定位于子图中特定轴相对位置。如果它只是相对于特定轴,理想情况下它将扩展到网格图。
1个回答

12

默认情况下,ax.text使用"数据坐标系",即将x和y值显示在轴刻度上。若要相对于由轴定义的矩形进行绘制,请使用transform=ax.transAxes。这里 0,0 是左下角点,1,1是右上角点。(当放置图例时,这种坐标系也非常有用。)

from matplotlib import pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 4), dpi=100)

for ind, ax in enumerate(axes):
    ax.plot(np.random.randint(0, 10, 2), np.random.randint(0, 10, 2))
    ax.text(x=0, y=1.05, s=f"Plot {ind+1}", fontsize=12, transform=ax.transAxes)
plt.show()

example plot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接