On Tue, 2007-11-20 at 11:15 -1000, Eric Firing wrote: > Jeff Whitaker wrote: > > If I draw two images with imshow, then set_zorder for one of them to be > > higher than the other, should that one be the one that displays? > > Jeff, > > It is a wart. Images are handled separately from other artists, and > always drawn first, either as a composite or in the order in which they > were added to the list. Here is the relevant code in the Axes.draw() > method: > > if len(self.images)<=1 or renderer.option_image_nocomposite(): > for im in self.images: > im.draw(renderer) > else: > # make a composite image blending alpha > # list of (mimage.Image, ox, oy) > > > mag = renderer.get_image_magnification() > ims = [(im.make_image(mag),0,0) > for im in self.images if im.get_visible()] > > > im = mimage.from_images(self.bbox.height()*mag, > self.bbox.width()*mag, > ims) > im.is_grayscale = False > l, b, w, h = self.bbox.get_bounds() > # composite images need special args so they will not > # respect z-order for now > renderer.draw_image(l, b, im, self.bbox) > > Maybe the set_zorder method for images should raise a warning, since it > can't do what one might reasonably expect. > > Mike may be able to comment on the prospects for removing this wart at > some point in the transforms branch; he is looking at related questions > right now. > > Eric > > > > > for example, with > > > > from pylab import * > > delta = 0.025 > > x = y = arange(-3.0, 3.0, delta) > > X, Y = meshgrid(x, y) > > Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) > > Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1) > > Z = Z2-Z1 # difference of Gaussians > > im2 = imshow(Z2, interpolation='bilinear', cmap=cm.gray, > > origin='lower', extent=[-3,3,-3,3]) > > im2.set_zorder(2) > > im1 = imshow(Z1, interpolation='bilinear', cmap=cm.gray, > > origin='lower', extent=[-3,3,-3,3]) > > im1.set_zorder(1) > > show() > > > > I expected Z2 to be plotted, but I actually see Z1. In fact, I always > > see the last one that was plotted, regardless of what I set the zorder to. > > > > I'm using the latest SVN, with GTKAgg. > > > > -Jeff > >
Any idea if the "wart" can be removed? I tried to use zorder with the SVN matplotlib (in conjuction with alpha-transparency, it can give a great way to represent missing data in waterfall diagram) but without success, image is still always in the back.... I did not use imshow, but NonUniformImage, but I guess the problem is the same for all AxisImage instances... BTW, I also submitted a patch to NonUniformImage to allows for bilinear interpolation on rectangular non-uniform grids. I think the original code was yours, so maybe you have something to say about the patch ;-) Best regards, Greg. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel