Thanks!  I'll just add that if you want to use the ticker example it needs
to be:


......
zmin, zmax = 160, 500
locator = ticker.MaxNLocator(10) # if you want no more than 10 contours
locator.create_dummy_axis()
locator.set_bounds(zmin, zmax)
levs = locator()
....

On Mon, May 18, 2009 at 7:29 PM, Eric Firing <efir...@hawaii.edu> wrote:

> 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

Reply via email to