From: Michael Droettboom <mdroe@st...>  20080630 15:10:25

Nihat wrote: > Hello all, > > I believe it is an easy thing to do but I haven't figured out how to > convert between coordinate systems using transData or transAxes. > > x = numpy.arange(0.0, 1.0+0.01, 0.01) > y = numpy.cos(2*2*numpy.pi*x) > pylab.plot(x, y) > > I want to transform y1 to axis scale between 0 and 1. > Also, I want to transform a value in axis scale, say 0.25, to a > corresponding y value in the data coordinates. > > I used > > ax = gca() > (x_screen, y_screen) = ax.transData.transform([x[10], y[10]) > (x10, y10) = ax.transAxes.inverted().transform([x_screen, y_screen]) > > Is it the proper way of doing it? Where can I find more info on > transformations in general? The new transformations infrastructure is documented in the new docs (which are still in progress...) http://matplotlib.sourceforge.net/doc/html/devel/transformations.html This document, however, doesn't describe what things like transData and transAxes are defined to be. That would probably be a useful thing to document. transAxes places the axes within the figure. transData maps from the data's coordinates all the way to the figure space which is (0, 0) to (1, 1). transData is a composite of the scale (for eg. logarithm), the limits (the currently "zoomed" in portion of the data), and the transAxes. It's the "fast lane" between the data and the screen. In your example, if you expect to go between data and screen coordinates, you would do: (x_screen, y_screen) = ax.transData.transform([x[10], y[10]) (x10, y10) = ax.transData.inverted().transform([x_screen, y_screen]) Note, we use transData both ways. > > Currently I am doing it manually scaling things with axis limits, > etc. I believe the neat thing is to use the transforms. Can somebody > explain me how it is done with transforms? I am using v0.98.1. I hope that answers your question, but it's not entirely clear what you would like to do. Please ask further if the above didn't help. Cheers, Mike 