william ratcliff wrote: > Thanks! I think that explains a lot. In the full range of my dataset, > I do have some rather high values. Instead of masking them out, I was > hoping that I could just set a minimum and maximum value using clim to > only display values within that range--it sounds like I need to mask > these values out if I want the contours to be generated automatically. > What I'd really like to be able to do is set zlow and zhigh and > renormalize the colorbar based on that range (for example, blue the > lowest value and red the highest value) for display purposes without > touching the underlying data...It might complicate the signature of > contour even more, but would it be possible to define a zlow, zhigh, > such that the contour levels are determined based on that zlow and zhigh > instead of the actual ranges in the data? If they are undefined, the > behavior would default to the actual range in the data? That way, one > could further separate the display of the data from the actual data... >
William, Yes, it would be possible to put in zlow and zhigh kwargs--but why? Why not just generate the contours you want over the range you want, as I originally suggested? You can use linspace, or arange, or a Ticker. You *don't* need to mask out values that are out of range. You can supply a colormap that uses a color you specify for over-range and under-range values, if you like; see http://matplotlib.sourceforge.net/examples/pylab_examples/image_masked.html for an example of this (although most of the rest of the example is much more complicated than what you need for contourf.) Ticker example (untested): import matplotlib.ticker as ticker zmin, zmax = 160, 500 locator = ticker.MaxNLocator(10) # if you want no more than 10 contours locator.set_bounds(zmin, zmax) levs = locator() # ... set up x, y, z ... contourf(x, y, z, levs) There was an earlier proposal that mappables, like ContourSet, accept norm kwargs vmin and vmax to be passed on to the norm when the default norm is used. I should look at this idea again. I'm not sure offhand whether it is a good idea, or whether it would take care of what you are asking for. Eric > Thanks, > William > > On Mon, May 18, 2009 at 6:18 PM, Eric Firing <efir...@hawaii.edu > <mailto:efir...@hawaii.edu>> wrote: > > william ratcliff wrote: > > Here, I've changed the number of contours to 15 and 45 > respectively--and the problem still remains. Do I need to > manually set the ranges of the segments on the colorbar or > something? It would seem to me that somehow the new limits are > not being used in determining the boundaries of which color is > used for which set of values. I should also mention that I am > using a masked array for z (which is what gives rise to the > white square in the bottom right corner). > > > I was not suggesting just changing the *number* of contours, I was > suggesting explicitly setting the boundaries. This is almost always > a better strategy; the signature in which a number of contours is > specified is intended only for quick and dirty exploration (and > Matlab compatibility, which led to the overly complex set of > possible signatures for contour in mpl). When contour is called as > you called it, it doesn't know or care anything about clim; it finds > the range of your input data and linearly spreads the requested > number of values over approximately that range. (Actually, it uses > a ticker to do this, so contour values will fall on reasonably nice > numbers.) I suspect there is an unmasked high value that is making > the auto-detected range too large. What do you get from > > print z.min(), z.max() > > > If you don't set the clim, it is set automatically based on the > contour levels; so if you set the levels, you don't need to set the > clim. > > Colorbar gets its information from the ContourSet object. > > > Eric > > > Thanks, > William > > > On Mon, May 18, 2009 at 5:16 PM, Eric Firing <efir...@hawaii.edu > <mailto:efir...@hawaii.edu> <mailto:efir...@hawaii.edu > <mailto:efir...@hawaii.edu>>> wrote: > > william ratcliff wrote: > > Hi! I have a question about contours and clim within > matplotlib. I load in some files and do some processing and > generate a contour plot using: > > > cmap=pylab.cm.jet > mycontour=pylab.contourf(x,y,z,95)#, > > > > > > You don't really want 95 contour levels, do you? > Instead of using set_clim, set the contour levels you want, and I > suspect everything will come out OK. E.g., > > pylab.contourf(x,y,z,pylab.linspace(160, 500, 18)) > > Eric > > mycontour.set_clim(vmin=160, vmax=500) > mycbar=pylab.colorbar() > mycbar.set_clim(vmin=160, vmax=500) > pylab.xlim((17,19.6)) > pylab.show() > > > However, the behavior is rather unexpected for me. I > find that > the colorbar has values rather stretched for values above the > cutoff specified in clim. Also, are the values > normalized between > the limits set in clim, or am I loosing a lot of dynamic > range? > > > Thanks, > William > > ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users