如何使用matplotlib定义相对于坐标轴的纵轴标签位置?

5
我需要在matplotlib中独立地精确控制我的ylabel的位置,而不受yticklabels的影响。这是因为我有一个matplotlib动画,当我改变yticklabels时,目前的ylabel会跳来跳去。这是不理想的。 文档似乎只允许我指定距离我的yticklabels最左边的部分的距离。(这并没有解决问题,实际上仍然造成了问题) 一种解决方法是手动放置标签。但是是否有更简单的方法?

1
你看过 https://matplotlib.org/gallery/pyplots/align_ylabels.html#sphx-glr-gallery-pyplots-align-ylabels-py 的下半部分吗?它们似乎有一个硬编码的偏移量。 - Evgeny
3
你是否尝试过从axis导入set_label_coords函数?在这里可以查看。使用它,你可以同时设置y轴标签的x和y方向坐标。 - Henrique Branco
1个回答

7

您可以通过在坐标轴上显式地添加文本来模拟普通 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.

这将文本放置在坐标轴的中间,略微向左。更改坐标轴的数据限制对文本没有影响,因为它总是定义在坐标轴上。同样,调整绘图或坐标轴(使用鼠标调整窗口大小、使用 fig.set_size_inches 等)将使 y 轴标签相对于坐标轴框保持位置不变,这正是标签所需要的。

您可能需要调整标签的 x 位置,以确保在动画过程中不会与刻度标记重叠。


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