Michael, You have found a big bug that I introduced recently. Here is a patch, which I committed to svn: (watch out for line-breaking by the mailer)
--- lib/matplotlib/contour.py (revision 2899) +++ lib/matplotlib/contour.py (working copy) @@ -680,7 +680,12 @@ if self.extend in ('both', 'max', 'min'): self.norm.clip = False self.set_array(self.layers) - # self.tcolors will be set by the "changed" method + # self.tcolors are set by the "changed" method, + # but need to be set here also + # until some refactoring is done. + tcolors = [ (tuple(rgba),) for rgba in + self.to_rgba(self.cvalues, alpha=self.alpha)] + self.tcolors = tcolors def _process_linewidths(self): linewidths = self.linewidths As the comments indicate, I think I will want to make more extensive changes, but this removes the immediate problem. To get the result you want, however, I think that your approach using the norm will not work; maybe it should, but right now it doesn't. Instead, simply specify the contour levels that you want, like this: contourf(x, y, z, linspace(minVal, maxVal, 20), cmap=matplotlib.cm.RdBu_r) The option you were using, specifying only the number of contours, is designed for quick-and-dirty automatic contouring, not for fine control. Eric Michael Galloy wrote: > Hello, > > I'm having trouble scaling the z-values for a filled contour plot. I > would like to produce a series of plots like: > > plot.contourf(x, y, z, 20, cmap=matplotlib.cm.RdBu_r) > > but I would like there to be an absolute correspondence between a given > z-value and a given color in the colormap no matter what the range of > z-values for a particular plot. I thought the way to do this would be to > use the norm keyword like: > > normFunction = matplotlib.colors.normalize(vmin=minValue, maxValue) > plot.contourf(x, y, z, 20, norm=normFunction, cmap=matplotlib.cm.RdBu_r) > > but this gives the error: > > File > "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/axes.py", > > line 4054, in contourf > return ContourSet(self, *args, **kwargs) > File > "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/contour.py", > > line 456, in __init__ > for level, level_upper, color in zip(lowers, uppers, self.tcolors): > AttributeError: ContourSet instance has no attribute 'tcolors' > > Any suggestions? > > Thanks, > Mike > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > > ------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users