Eric, the "BoundaryNorm" was what I was looking for. it did exactly what I needed; split the colormap up evenly into discrete colors based on the number of elements in my levels array. Thanks, P.Romero
---------------------------------------- > Date: Sun, 15 Mar 2009 10:38:22 -1000 > From: efir...@hawaii.edu > Subject: Re: [Matplotlib-users] question about levels & colormaps for contour > functions > To: romero...@hotmail.com; matplotlib-users@lists.sourceforge.net > > Pablo Romero wrote: >> Eric, >> >> I believe the problem is that my 19 levels are not evenly distributed; >> >> Lv=(1,3,5,6,7,8,9,10,12,14,16,18,20,25,30,35,40,50,75) > > No, I don't think that has much to do with it, unless the problem is > that the colors of some levels are too similar. > > Again, please make a simple, complete, self-contained example, and we > will go from there. > > I think what you want may be something like this: > > levs=[1,3,5,6,7,8,9,10,12,14,16,18,20,25,30,35,40,50,75] > norm = mpl.colors.BoundaryNorm(levs, 256) > z = rand(10,15)*14 # fake data covering only lower levs > contourf(z, levs, norm=norm, cmap=cm.jet, extend='both') > colorbar() > > >> >> the first part of the range starts at 1,3,5, but then includes 6,7,8,9, and >> then only goes with even numbers..10,12,14,16,18,20...then by 5 up until 35, >> then jumps by 10...etc. >> >> I know this seems strange, but this was done because Im plotting 'ocean wave >> heights' and these were decided to be the 'heights of interest' for the >> project Im working on. >> > > Perfectly reasonable. > >> anyway, what I want is to be able to breakup the 'cm.jet' spectrum evenly >> based on the # of levels (and not on their values), and spread my levels >> evenly across the spectrum.... >> >> i.e., I want the first 6-7 levels to be evenly spread from blue to about >> green acros cm.jet's spectrum, approx. the next 6 levels to be evenly spread >> across cm.jet's yellow-orange part of the spectrum, and the last few levels >> to be evenly spread across the reds... >> >> Ideally, Id like to be able to use any colormap, and simply break up its >> color spectrum evenly, and then assign each distinct color to each level in >> my levels array. >> >> So, I guess I need a method to programatically, evenly break up cm.jet by >> the # of levels, create a colors array & pass this array to >> contourf(colors='mycolorsarray')... >> >> does this make sense? >> >> P.Romero >> >> ---------------------------------------- >>> Date: Sun, 15 Mar 2009 08:32:32 -1000 >>> From: efir...@hawaii.edu >>> Subject: Re: [Matplotlib-users] question about levels & colormaps for >>> contour functions >>> To: romero...@hotmail.com >>> CC: matplotlib-users@lists.sourceforge.net >>> >>> Pablo Romero wrote: >>>> Hi, >>>> >>>> I would like to know how I can pass an array of levels and also a colormap >>>> to the contour() function and have the levels span the entire colormap. >>>> example... >>>> >>>> if I do the following.... >>>> >>>> >>>> Lv=(1,3,5,6,7,8,9,10,12,14,16,18,20,25,30,35,40,50,75) >>>> >>>> cs=plt.contourf(X,Y,waveheight,Lv,cmap=cm.jet,extend='both') >>>> >>>> >>>> I would expect that contours that are in the higher levels (i.e., levels >>>> above value '14' in my levels array) would be plotted with lighter colors >>>> in the cm.jet spectrum; the greens, yellows,oranges,reds, etc. >>>> >>>> However, contourf is simply breaking up the lower,"dark blue" half of the >>>> cm.jet spectrum into small slices, and spreading all of my levels >>>> throughout only the bottom half of cm.jet. >>>> >>> I don't see the problem yet. Here is an attempt to recreate what it >>> sounds like you are describing above (run in ipython -pylab): >>> >>> contourf(rand(10,12), arange(0,5.01,0.2), cmap=cm.jet, extend='both') >>> colorbar() >>> >>> The data are all blue because they are in the 0-1 range, while the >>> levels span the 0-5 range. The colorbar shows that the colormap is >>> covering the latter range, as it should. >>> >>> If you can make a simple self-contained example like this, and then >>> describe the difference between what it does and what you want it to do, >>> we can figure out how to get your desired result. >>> >>> Eric >>> >>> >>> >>> >>> >>>> I followed this tutorial: >>>> http://www.scipy.org/Cookbook/Matplotlib/ColormapTransformations >>>> >>>> that shows how to create a "discrete" colormap, but this also didnt work; >>>> the contourf function again simply sliced up the lower, blue colors and >>>> spread my all of my layers across the "blues" in my discrete colormap. >>>> >>>> >>>> If I use a colors array instead of a colormap, I can achieve what I want. >>>> However, Id like to be able to use a colormap so that I dont have to >>>> manually create color arrays everytime that I want to change my >>>> colorscheme. >>>> >>>> So, how can I force contour() to spread my levels across THE WHOLE >>>> spectrum of a colormap? >>>> >>>> Please help, >>>> >>>> Thanks, >>>> P.Romero >>>> >>>> >>>> _________________________________________________________________ >>>> Express your personality in color! Preview and select themes for Hotmail®. >>>> http://www.windowslive-hotmail.com/LearnMore/personalize.aspx?ocid=TXT_MSGTX_WL_HM_express_032009#colortheme >>>> ------------------------------------------------------------------------------ >>>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are >>>> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and >>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based development >>>> software that enables intelligent coding and step-through debugging. >>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com >>>> _______________________________________________ >>>> Matplotlib-users mailing list >>>> Matplotlib-users@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> _________________________________________________________________ >> Windows Live™ Contacts: Organize your contact list. >> http://windowslive.com/connect/post/marcusatmicrosoft.spaces.live.com-Blog-cns!503D1D86EBB2B53C!2285.entry?ocid=TXT_TAGLM_WL_UGC_Contacts_032009 > _________________________________________________________________ Windows Live™ Contacts: Organize your contact list. http://windowslive.com/connect/post/marcusatmicrosoft.spaces.live.com-Blog-cns!503D1D86EBB2B53C!2285.entry?ocid=TXT_TAGLM_WL_UGC_Contacts_032009 ------------------------------------------------------------------------------ Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are powering Web 2.0 with engaging, cross-platform capabilities. Quickly and easily build your RIAs with Flex Builder, the Eclipse(TM)based development software that enables intelligent coding and step-through debugging. Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users