From: Eric F. <ef...@ha...> - 2009-03-15 20:39:08
|
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: ef...@ha... >> Subject: Re: [Matplotlib-users] question about levels & colormaps for contour functions >> To: rom...@ho... >> CC: mat...@li... >> >> 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 >>> Mat...@li... >>> 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 |