On 07/14/2010 12:52 PM, Steve McFarlin wrote:
Hello,

I am trying to create a color map that maps 18 colors across 50 levels. As an 
example let say I have three colors [r,g,b] and want everything between 1 an 2 
to be r, 3 through 10 to be g, and 11 through 50 to be b. From what I can tell 
it does not seem to be possible. Currently this is what I have, but it does not 
seem to work as I assumed.

colorList = 
[[0.,0.,102./255.],[0,42./255.,217./255.],[0,110./255.,217./255.],[0,178./255.,217./255.],
             
[0,212./255.,212./255.],[0,217./255.,166./255.],[0,217./255.,0],[149./255.,217./255.,0],
             
[217./255.,217./255.,0],[217./255.,174./255.,0],[217./255.,131./255.,0],[217./255.,87./255.,0],
             [217./255.,0,0],[174./255.,0,0],[140./255.,0,0],[135./255.,0,0],
             [105./255.,0,0],[65./255.,0,0]]

levels = [1,2,3,4,5,6,7,8,9,10,12,15,20,25,30,35,40,50]
cmap = matplotlib.colors.ListedColormap(colorList, name = 'theColorMap', N = 
len(colorList))
...
m.contourf(x,y,z,cmap=cmap, levels=levels, extend='both')

If the levels array is continuous then it works as expected. With the above 
settings I get unexpected results, which includes 'ghost contour lines'. The 
data I am rendering is from a GRIB file from NOAA.

I think there is some confusion of terminology here, and the "ghost contour lines" are the least of your problems.

The contourf "levels" are giving boundaries of regions, so with 18 levels, you have 17 regions.

I suspect that what you want is illustrated by the attached extremely simple example. (You may or may not want to use the spacing kwarg to colorbar.)

Eric


Is this possible?


Thanks,
Steve
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

x = np.arange(15)
y = np.arange(10)
X, Y = np.meshgrid(x, y)

Z = X**2 + Y**2

boundaries = [0, 80, 160, 280]  # 4 boundaries

cmap = mcolors.ListedColormap(['r', 'g', 'b']) # 3 colors
norm = mcolors.BoundaryNorm(boundaries, 3)
plt.contourf(X, Y, Z, levels=boundaries, cmap=cmap, norm=norm)
plt.colorbar(spacing='proportional')
plt.show()

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to