Matplotlib:将文本与轴刻度对齐

时间:2018-03-20 12:41:24

标签: python matplotlib

我想在我的情节的y轴旁边显示一个自定义文字,就像这个最小的例子一样:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.text(-0.05, 0.5, '$x$')
plt.show()

水平对齐0.05是我通过反复试验弄清楚的。 不幸的是,0.05仅适用于绘图窗口的一个大小。

对于默认窗口大小,文本是我想要的地方:

enter image description here

但是一旦我扩大了情节窗口,我的文字就会在无人区中迷失:

enter image description here

我尝试了ax.text(-ax.yaxis.get_tick_padding, 0.5, '$x$'),但是填充似乎是以不同的单位来衡量的。

如何确保每个窗口大小的文本与y轴的距离相同?

1 个答案:

答案 0 :(得分:2)

您可以使用ax.annotate代替ax.text,因为它允许更多的自由。具体来说,它允许在某个坐标系中注释一个点,文本在不同坐标中偏移到该位置。

以下内容将在(0, 0.5)给出的坐标系中的yaxis_transform位置创建注释,即(axes coordinates, data coordinates)。然后,文本本身会被此位置的-5点偏移。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.annotate('$x$', xy=(0, 0.5), xycoords=ax.get_yaxis_transform(),
                   xytext=(-5,0), textcoords="offset points", ha="right", va="center")

plt.show()

enter image description here

请注意,-5也只是估算值,您可能希望自己再次找到最佳价值。但是,只要标签的填充和字体大小没有改变,这样做就会保持不变。