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