如何使用 matplotlib 定义相对于轴的 ylabel 位置?

got*_*ota 5 python matplotlib

我需要使用 matplotlib 独立于我的 yticklabels 精确控制我的 ylabel 的位置。这是因为我有一个 matplotlib 动画,当我更改 yticklabels 时,该动画当前有 ylabel 跳跃。这是不可取的。

文档似乎只允许我指定与 yticklabels 最左侧部分的距离。(这不能解决问题,而且确实是造成问题的原因)

一种解决方案是手动放置标签。但是有没有更简单的方法呢?

bna*_*ker 6

您可以通过向轴显式添加文本来模拟普通 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 位置,以确保它不会在动画期间更改时与刻度线重叠。