 # default imshow extent

Hi,

If I display a simple matrix with imshow(), e.g:

a = zeros((3,3))
a[0,0] = 1
imshow(a,interpolation='nearest')

the axes extend from 0.0 to 3.0 in such a way that elements are centered at 0.5, 1.5,... For example, the point at (x,y)=(.9,.9) is red, whereas nearest-interp. should give a[1,1]=0. Would it make more sense for the default to be like this (as is in matlab): ?

imshow(a,interpolation='nearest',extent=(-0.5, 2.5, -0.5, 2.5))

Is there a way to get behavior this automatically?

Thanks,
Ken

Ken Schutte wrote:

Hi,

If I display a simple matrix with imshow(), e.g:

a = zeros((3,3))
a[0,0] = 1
imshow(a,interpolation='nearest')

the axes extend from 0.0 to 3.0 in such a way that elements are centered at 0.5, 1.5,... For example, the point at (x,y)=(.9,.9) is red, whereas nearest-interp. should give a[1,1]=0. Would it make more sense for the default to be like this (as is in matlab): ?

imshow(a,interpolation='nearest',extent=(-0.5, 2.5, -0.5, 2.5))

Ken,

Actually, the matlab nearest equivalent would be
imshow(a, interpolation='nearest', extent=(-0.5, 2.5, 2.5, -0.5))
so that the y-axis increases down and both axes correspond to the array indices. I agree that this makes good sense. It seems to me that in the long run it would make imshow easier to explain and easier to use.

Is there a way to get behavior this automatically?

Not at present without defining your own little function to set the extent. It would be easy to change imshow to work this way, so the question is whether enough other users would prefer it and whether it would cause too much disruption. It could also be made optional via a new kwarg or a new interpretation of an old kwarg. For example, extent could take a string to indicate this option, something like "extent='indices'". An rc param could control the default.

Some discussion (and/or a ruling by John) is needed. My preference is that if a change is made, it be a change in basic default behavior, not additional options, because any non-default behavior can be achieved easily using the extent kwarg in its present form, and at some point adding options and more complicated handling of kwargs causes more trouble (complex code and documentation) than it is worth. I don't see any advantage of the present behavior over the matlab-equivalent behavior--but that may be because I am ignorant of the original rationale.

If imshow behavior is changed, a corresponding change will be needed in the image-matching capability of contour. Maybe matshow would also change; I haven't checked.

Eric