matplotlib 获取轴相对刻度位置
matplotlib get axis-relative tick positions
我知道我可以通过 ax.get_yticks()
获取我的 y-ticks 的位置(顺便说一句,这是 best/correct 获取它们的方法吗?)。但我需要相对于轴限制的刻度位置(即在 0 和 1 之间)。获得它的最佳方法是什么?我试过 ax.get_yticks(transform=ax.transAxes)
,但没有用。
这个转换可以很容易地手工完成:
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]
我知道我可以通过 ax.get_yticks()
获取我的 y-ticks 的位置(顺便说一句,这是 best/correct 获取它们的方法吗?)。但我需要相对于轴限制的刻度位置(即在 0 和 1 之间)。获得它的最佳方法是什么?我试过 ax.get_yticks(transform=ax.transAxes)
,但没有用。
这个转换可以很容易地手工完成:
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]