On 02/01/2011 02:18 PM, Benjamin Root wrote:
> On Tue, Feb 1, 2011 at 6:05 PM, Jeremy Conlin <jlcon...@gmail.com
> <mailto:jlcon...@gmail.com>> wrote:
>
>     On Tue, Feb 1, 2011 at 5:00 PM, Benjamin Root <ben.r...@ou.edu
>     <mailto:ben.r...@ou.edu>> wrote:
>      >
>      >
>      > On Tue, Feb 1, 2011 at 5:48 PM, Jeremy Conlin <jlcon...@gmail.com
>     <mailto: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.

Not to the ListedColormap, but to the imshow or whatever.  Here is an 
example of BoundaryNorm:

http://matplotlib.sourceforge.net/examples/pylab_examples/image_masked.html

And here is another, using a BoundaryNorm with a ListedColormap:

http://matplotlib.sourceforge.net/examples/pylab_examples/multicolored_line.html

(It is the first of the two line plots.)

Note that you need to instantiate it with the number of colors in your 
colormap.

Eric



>
> 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