Matplotlib获取相对于坐标轴的刻度位置。

4

我知道可以通过ax.get_yticks()来获取y轴刻度的位置(顺便问一下,这是获取它们的最佳/正确方法吗?)。但是我需要相对于坐标轴限制(即在0和1之间)的刻度位置。最好的方法是什么?我尝试了ax.get_yticks(transform=ax.transAxes),但它不起作用。


我完全不理解你的问题。 - tacaswell
2
@tcaswell 我认为他想要获取坐标轴上的刻度位置。 - hitzg
没错,谢谢!这就是我在寻找的东西。 - frixhax
你为什么想要这个呢?我怀疑你正在以一种非常困难的方式做某件事情 ;) - tacaswell
因为 这个 无法解决问题,我必须在没有图形间隙的同时消除重叠标签。 - frixhax
1个回答

6
这种转换可以轻松地手动完成:
y_min, y_max = ax.get_ylim()
ticks = [(tick - y_min)/(y_max - y_min) for tick in ax.get_yticks()]

更新

为了使其适用于对数刻度,我们需要使用matplotlib.transforms。但是转换只能使用(x,y)点,因此我们需要首先使用一些x坐标(例如0)来补充y刻度:

crd = np.vstack((np.zeros_like(ax.get_yticks()), ax.get_yticks())).T

然后我们可以将数据坐标转换为显示坐标,然后转换为轴坐标,并取其y列:

ticks = ax.transAxes.inverted().transform(ax.transData.transform(crd))[:,1]

不错的解决方案!但如果轴在对数刻度上可能会失败。 - hitzg
确切地说,对于我正在做的事情,它是有效的。但也许有一些更通用的方法? - frixhax
对于更一般的方法,您可以随时尝试使用转换,但这更加繁琐,而且不符合Pythonic。尽管如此,为了完整起见,我将其添加到答案中。 - Andrey Sobolev

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