This question already has an answer here:
I am using ipython with matplotlib, and I show images in this way:
(started up with: ipython --pylab)
figure()
im = zeros([256,256]) #just a stand-in for my real images
imshow(im)
Now, as I move the cursor over the image, I see the location of the mouse displayed in the lower left corner of the figure window. The numbers displayed are x = column number, y = row number. This is very plot-oriented rather than image-oriented. Can I modify the numbers displayed?
- My first choice would be to display x = row number*scalar, y = column number*scalar
- My second choice would be to display x = row number, y = column number
- My third choice is to not display the numbers for the mouse location at all
Can I do any of these things? I'm not even sure what to call that little mouse-over test display widget. Thanks!
Yes, you can. But it's harder than you'd think.
The mouse-tracking label you see is generated by calls to matplotlib.axes.Axes.format_coord in response to mouse tracking. You have to create your own Axes class (overriding format_coord to do what you want it to do), then instruct matplotlib to use it in place of the default one.
Specifically:
Make your own Axes subclass
Register your Axes subclass
Create a figure and with your custom axes
Draw your data as before
You can do this quite simply on a per axis basis by simply re-assigning
format_coord
of theAxes
object, as shown in the examples.format_coord
is any function which takes 2 arguments (x,y) and returns a string (which is then displayed on the figure.If you want to have no display simply do:
If you want just the row and column (with out checking)
If you want to do this on every iimage you make, simply define the wrapper function
which with out much testing I think should more-or-less be drop-in replacement for
plt.imshow