matplotlib get axis-relative tick positions

Question:

I know that I can get the positions of my y-ticks by ax.get_yticks() (btw., is that the best/correct way to get them?). But I need the tick positions relative to the axis limits (i.e., between 0 and 1). What is the best way to get that? I tried ax.get_yticks(transform=ax.transAxes), which does not work.

Asked By: frixhax

||

Answers:

This transformation can be easily done by hand:

y_min, y_max = ax.get_ylim()
ticks = [(tick - y_min)/(y_max - y_min) for tick in ax.get_yticks()]

UPDATE

To get it working with log scales, we need to employ matplotlib.transforms. But transforms can only work with (x,y) points, so we need first to complement y-ticks with some x coordinates (for example, zeros):

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

Then we can transform data coodinates to display and then to axes and take y column of it:

ticks = ax.transAxes.inverted().transform(ax.transData.transform(crd))[:,1]
Answered By: Andrey Sobolev
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.