On Tue, Feb 1, 2011 at 6:05 PM, Jeremy Conlin <jlcon...@gmail.com> wrote:

> On Tue, Feb 1, 2011 at 5:00 PM, Benjamin Root <ben.r...@ou.edu> wrote:
> >
> >
> > On Tue, Feb 1, 2011 at 5:48 PM, Jeremy Conlin <jlcon...@gmail.com>
> wrote:
> >>
> >> I'm trying to create a custom colormap used with pcolormesh, but the
> >> results seem inconsistent to me.  I want the following colors
> >>
> >> -3 < x <= -2 ----- Black
> >> -2 < x <= -1 ----- Blue
> >> -1 < x <= 0  ----- Yellow
> >>  0 < x <= 1  ----- Green
> >>  1 < x <= inf ----- Red
> >>
> >> A minimal example is copied below.  I have a 2-D array that looks like:
> >>
> >>  -1,    6,  2.5
> >> 1.3,  -2,  4/3
> >> 2.5,   6,  0
> >>
> >> I want to get a pcolormesh that looks like
> >>
> >> R R Y
> >> R K R
> >> B R R
> >>
> >> But instead I get:
> >>
> >> Y R B
> >> Y K Y
> >> K R Y
> >>
> >> I recognize that the pcolormesh is plotted "upside-down" from how the
> >> matrix is printed.  I apparently don't understand how to use a custom
> >> colormap.  I have tried to follow the example here:
> >>
> >> http://matplotlib.sourceforge.net/examples/api/colorbar_only.html
> >>
> >> but haven't been too successful.  It seems like there is a
> >> normalization going on that I can't seem to track down.  Can anyone
> >> see what is wrong?
> >>
> >> Thanks,
> >> Jeremy
> >>
> >>
> >> import numpy
> >> import matplotlib.pyplot as pyplot
> >> import matplotlib.colors
> >>
> >> C = numpy.array([[-1,6,2.5],[4/3., -2, 4/3.],[2.5,6,0.0]],dtype=float)
> >>
> >> cMap = matplotlib.colors.ListedColormap(['k', 'b', 'y', 'g',
> 'r'])
> >> Bounds = [-3.0, -2.0, -1.0, 0.0, 1.0, numpy.inf]
> >>
> >> # Plot
> >> Fig = pyplot.figure()
> >> pyplot.pcolormesh(C, cmap=cMap)
> >>
> >
> > Have you given imshow() a try?  The pcolor() and family are really meant
> for
> > more general domain specifications.  imshow() is about as basic as one
> can
> > get for producing an image that shows the colors for particular values.
> > matshow() also does something similar and doesn't interpolate between
> > points.
> >
> > I don't know if it would fix your problem, but it should be a good start.
>
> I just tried both imshow and matshow and they gave the same output,
> but the plot was rotated -90ยบ.  I don't care so much about how it is
> oriented, but I do care about consistency, i.e. -1 should be plotted
> as blue, but is instead black.  I could also accept -1 as yellow since
> -1 is on the boundary.  pcolor, imshow, and matshow all show the same
> inconsistency.
>
> Jeremy
>

I think I just figured out what is wrong.  In your code, you create a
ListedColormap, but you don't assign a Norm object.  So, when you call
pcolor or whatever, it will use the default norm using the range of input
values.  I see you created a list of boundaries called Bounds, but you don't
do anything with it.

I believe you want  to first make a BoundaryNorm object using Bounds and
pass that object to the ListedColormap using the norm keyword.

That should fix it.

Ben Root
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to