John Hunter wrote:
>>>>>>"Dominique" == Dominique Orban <Dominique.Orban@...> writes:
> Dominique> When using imshow(), why does there always seem to be a
> Dominique> blank zone along the southern and eastern edges of the
> Dominique> figure? For instance:
> Dominique> X = rand(10,10) imshow(X)
> Dominique> plots a luminance image of X, which seems fine, except
> Dominique> for the lower and rightmost edges, which are blank. I
> Dominique> may be misunderstanding the purpose of imshow, but
> Dominique> skimming through the code didn't give me an answer. I
> Dominique> am using matplotlib 0.52 on WinXP with either GTKAgg or
> Dominique> TkAgg.
> Hi Dominique,
> Your example did point me to a small bug in the image module, but it
> is mostly unrelated to what you are observing. In the axes.py
> function imshow, replace
> self.set_image_extent(0, numcols-1, 0, numrows-1)
> self.set_image_extent(0, numcols, 0, numrows)
> This only affects the tick labeling (not the actual image display)
> but it was wrong before and should be changed.
> Now run this script
> from matplotlib.matlab import *
> X = rand(10,10)
> im = imshow(X)
> im = imshow(X)
> The key thing is that the white border you are seeing arises from
> interpolation. The points on the bottom and right have no neighbors
> in those directions, and so they interpolate to the background color,
> which is white.
> You can set the axis limits so that these regions don't appear, or use
> nearest neighbor interpolation.
> Let me know if these suggestions don't work for you.
Many thanks for your reply and suggestions. I see what is happening.
Nearest neighbor interpolation has the colors right, but i was trying to
get "more interpolation". I guess looking at the great pictures that
imshow() produces i was hoping for a result such as that of
X = rand(10)
pcolor( X )
in Matlab. The Matplotlib picture is just as good really, except for the
border. Why are the other borders not white as well? Is the
interpolation "directional"? Why aren't pixels on the border only
interpolated with their neighbors inside the image, and not those
outside (these have less neighbors than pixels in the middle)?
Perhaps you can point me to the part of the code (c++ i assume) which
does the interpolation? Should i grab the CVS repository for that? Then
maybe i can play around and see if i can achieve the effect i am looking
Thanks again !