我需要使用 matplotlib 独立于我的 yticklabels 精确控制我的 ylabel 的位置。这是因为我有一个 matplotlib 动画,当我更改 yticklabels 时,该动画当前有 ylabel 跳跃。这是不可取的。
文档似乎只允许我指定与 yticklabels 最左侧部分的距离。(这不能解决问题,而且确实是造成问题的原因)
一种解决方案是手动放置标签。但是有没有更简单的方法呢?
您可以通过向轴显式添加文本来模拟普通 y 标签的行为。如果 y 范围变化很大,最好将文本放置在轴坐标中,而不是数据坐标中。这是通过transform关键字参数完成的,如下所示:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
t = ax.text(-0.1, 0.5, 'Y label', rotation=90,
verticalalignment='center', horizontalalignment='right',
transform=ax.transAxes)
ax.set_ylim(-10, 10) # Change y-limits, label position won't change.
Run Code Online (Sandbox Code Playgroud)
这会将文本放置在轴的中间位置,并稍微向左放置。对轴数据限制的更改对文本没有影响,因为它始终在轴坐标中定义。同样,缩放绘图或轴(使用鼠标调整窗口大小,使用fig.set_size_inches等)将使 y 标签相对于轴框本身保持在适当的位置,这正是您想要的标签。
您可能需要调整标签的 x 位置,以确保它不会在动画期间更改时与刻度线重叠。