On 01/02/2012 05:51 PM, Tony Yu wrote: > > > On Mon, Jan 2, 2012 at 3:33 PM, Eric Firing <efir...@hawaii.edu > <mailto:efir...@hawaii.edu>> wrote: > > On 12/30/2011 01:57 PM, Paul Ivanov wrote: > > Eric Firing, on 2011-12-27 15:31, wrote: > > It looks like this is something I can fix by modifying > ListedColormap. > It is discarding the alpha values, and I don't think there > is any reason > it needs to do so. > > > One of my first attempts at a contribution to matplotlib three > years ago was related to this. It was in reply to a similar > question on list, and I wrote a patch, but never saw it through > to inclusion because it wasn't something I needed. > > > http://www.mail-archive.com/__matplotlib-users@lists.__sourceforge.net/msg09216.html > > <http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg09216.html> > > I think it's a helpful starting point, as I include a discussion > on the limitation of mpl colormaps there. > > > I'm switching this to the devel list. > > Please try > https://github.com/efiring/__matplotlib/tree/colormap_alpha > <https://github.com/efiring/matplotlib/tree/colormap_alpha> > which has changes similar to yours so that alpha is fully changeable > in colormaps. > > I think this is going to be OK as far as the colormap end of things > is concerned, but it turns up a new problem related to alpha in > images, and reminds us of an old problem with alpha in agg, at > least. The problems are illustrated in the attached modification of > the custom_cmap.py example. I added a fourth panel for testing > alpha. Look at the comments on the code for that panel, and try > switching between pcolormesh and imshow. Pcolormesh basically works > as expected, except for the prominent artifacts on patch boundaries > (visible also in the colorbar for that panel). These boundary > artifacts are the old problem. The new problem is that imshow with > alpha in the colormap is completely wonky with a white background, > but looks more normal with a black background--which is not so good > if what you really want is a white background showing through the > transparency. > > Eric > > > This is great! I had hacked together a custom colormap class and > overrode its __call__ method to get a similar effect. This solution is > much more elegant and general. > > As for the imshow issue, it seems to be an issue with the "nearest" > interpolation method. The example copied below shows the result for > three different interpolation methods. The weird behavior only occurs > when interpolation is set to 'nearest' (I checked all other > interpolation methods, not just the 3 below). What's really strange is > that `interpolation='none'` gives the expected result, but in theory, > 'none' maps to the same interpolation function as 'nearest'. A quick > scan of matplotlib.image suggests that 'none' and 'nearest' share the > same code path, but I'm obviously missing something.
It looks to me like 'none' is going through _draw_unsampled_image instead of the path that all the other interpolations, including 'nearest' go through. I think that JJ put in this unsampled functionality about two years ago. I've never dug into the guts of image operations and rendering, so I don't even understand what sort of "sampling" is referred to here. Eric > > -Tony > > #~~~~ > import matplotlib.pyplot as plt > > > cdict = {'red': ((0.0, 0.0, 0.0), > (0.5, 0.8, 1.0), > (1.0, 0.4, 1.0)), > > 'green': ((0.0, 0.0, 0.0), > (0.5, 0.9, 0.9), > (1.0, 0.0, 0.0)), > > 'blue': ((0.0, 0.0, 0.4), > (0.5, 1.0, 0.8), > (1.0, 0.0, 0.0)), > > 'alpha': ((0.0, 1.0, 1.0), > (0.5, 0.3, 0.3), > (1.0, 1.0, 1.0))} > > plt.register_cmap(name='BlueRedAlpha', data=cdict) > > > if __name__ == '__main__': > import numpy as np > > w = 10 > y = np.linspace(0, 2*np.pi, w+1) > Z = np.tile(y, (w+1, 1)) > > plt.rcParams['image.cmap'] = 'BlueRedAlpha' > > f, axes = plt.subplots(ncols=3) > interp_method = ['none', 'bilinear', 'nearest'] > for interp, ax in zip(interp_method, axes): > # Draw a line with low zorder so it will be behind the image. > ax.plot([0, w], [0, w], color='c', lw=20, zorder=-1) > ax.imshow(Z, interpolation=interp) > ax.set_title(interp) > > plt.show() > #~~~~ ------------------------------------------------------------------------------ Write once. Port to many. Get the SDK and tools to simplify cross-platform app development. Create new or port existing apps to sell to consumers worldwide. Explore the Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join http://p.sf.net/sfu/intel-appdev _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel