Does anyone know how to convert matplotlib data units into normalized units?
The reason that I need it is that I need to create a subplot on top of another plot.
And the default syntax:
plt.axes([0.1,0.1,0.3,0.3])
requires normalized coordinates, but I want to use the data coordinates:
For example this code:
plt.plot([0,2],[2,4]);
plt.axes([0.3,.3,0.4,.4])
produces this:

But I’d like to be able to define the location of the subplot using the data coordinates of it
, something like [0.7,2.5,1.7,3.5]. I’ve tried to fiddle with axes.transData, axes.get_transform() and the like but didn’t succeed to find the right function to do the job
Here’s one way to do it:
inner
axesprinted at0.5, 2.5, 1.0, 0.3(in outeraxescoords)You basically need two transformations — one from src-coords to display, and one from display to dest-coord. From the docs there seems to be no direct way:
http://matplotlib.org/users/transforms_tutorial.html
axandfigboth carry transformer with them — to display-coords!If you call
invertedon them, you get an transformer for the inverse direction.Here’s the full code for the above example: