matplotlib获取轴相对刻度位置 - python

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

python大神给出的解决方案

可以轻松地手动完成此转换:

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坐标(例如零)对y-ticks进行补充:

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

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

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