[ncl-talk] Forcing white in the middle of a symmetric colorbar
Dennis Shea
shea at ucar.edu
Sun Jan 13 11:35:53 MST 2019
Also:
*http://www.ncl.ucar.edu/Document/Functions/Contributed/symMinMaxPlt.shtml*
<http://www.ncl.ucar.edu/Document/Functions/Contributed/symMinMaxPlt.shtml>
x = *random_normal*
<http://www.ncl.ucar.edu/Document/Functions/Built-in/random_normal.shtml>
(0,10,(/30,40/))
res = True
res at cnFillOn = True ; turn on color fill
res at cnFillPalette = "BlWhRe" ; choose *any *colormap with "White in
Middle"
;
*http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml*
<http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml>
* ;
http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml#White-in-the-middle
<http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml#White-in-the-middle>*
; automatically create nice symmetric min/max/interval attribute values
*symMinMaxPlt* (x,20,False,*res*)
*print*(res) ; to see the values
Variable: *res*
Type: logical
Number Of Attributes: 6
cnFillOn : True
cnFillPalette "BlWhRe"
cnLevelSpacingF : 4
cnMaxLevelValF : 28
cnMinLevelValF : -28
cnLevelSelectionMode : ManualLevels
If desired: The spacing could be readily reset after return
res at cnLevelSpacingF = 0.5*res at cnLevelSpacingF
or
res at cnLevelSpacingF = 0.25
On Sun, Jan 13, 2019 at 8:39 AM Anne <anne.seidenglanz at unive.it> wrote:
> Hi Adam,
>
> thanks for taking the time to respond to me, and thanks for your
> suggestion! In fact I've found a work-around in the meantime that seems to
> work quite efficient with what I wanted to achieve, and that is also
> similar to your suggestion:
>
> 1) I work out my value range and associated number of contour intervals,
> depending on how fine I want my contours, using *fspan*:
> -> e.g. res at cnLevels = fspan(-7, 7, 56) , in
> this case I decided for a contour spacing of 0.25
>
> 2) I use 'span_color_indexes' and decide on a color palette to retrieve
> the desired amount of colours. Here I need to add 2 to the number in
> contour levels above:
> -> icol = span_color_indexes("BlWhRe", 58) so I have 58 color
> indexes here (56 contour levels)
>
> 3) I insert as many white intervals as I want around the center of my
> color range determined by 'icol', here in this example I chose 4 white
> intervals that appear in the middle of the color bar:
> -> icol(27:30) = -1
>
> In this way I achieved more or less what I wanted, the only problem I
> encountered was that there seemed to be no control over the labal bar
> labels anymore, in some plots they appeared rather random, or at least with
> a lot of decimal places..
>
> I attach one example of a 2m-temperature plot.
>
> cheers
> Anne
>
>
>
>
>
>
> On Sat, Jan 12, 2019 at 1:06 AM Adam Phillips <asphilli at ucar.edu> wrote:
>
>> HI Anne,
>> If you want a symmetric colorbar with white in the middle, you want to
>> use (the default) gsnSpreadColors, you do not want to always set cnLevels,
>> and you do not want to specify what colors you use by setting cnFillColors
>> (for every color), then I think the best thing to do would be to use
>> getvalues to retrieve the colors after the plot has been created, modify
>> them, and then use setvalues to set them. The following should get you
>> started. Note that the label bar has to be created after
>> gsn_csm_contour_map is called as you are modifying the colors after the
>> plot is drawn.
>>
>> If you have any further questions let ncl-talk know.
>> Adam
>>
>> begin
>> ;************************************************
>> ; read in netCDF file
>> ;************************************************
>> a = addfile("$NCARG_ROOT/lib/ncarg/data/cdf/uv300.nc","r")
>> u = a->U(1,:,:) ; read July zonal winds
>> ;************************************************
>> ; create plot
>> ;************************************************
>> wks = gsn_open_wks("png","color") ; send graphics to PNG
>> file
>> gsn_define_colormap(wks,"ncl_default")
>> cmap = read_colormap_file("ncl_default")
>>
>> res = True ; plot mods desired
>> res at tiMainString = "Default Color" ; main title
>> res at cnFillOn = True ; turn on color fill
>> res at gsnDraw = False
>> res at gsnFrame = False
>> res at lbLabelBarOn = False
>>
>> plot = gsn_csm_contour_map(wks,u, res) ; create plot
>>
>> getvalues plot at contour ; retrieve colors/levels from plot
>> "cnFillColors" : colors
>> "cnLevels" : levels
>> end getvalues
>>
>> ncolors = dimsizes(colors)
>> colors(ncolors/2-1) = 0 ; set two middle colors to white
>> colors(ncolors/2) = 0 ; if you have odd number of colors this
>> should be modified
>>
>> print(colors)
>>
>> setvalues plot at contour
>> "cnFillColors" : colors ; reset the colors
>> end setvalues
>>
>> lbres = True
>> lbres at vpWidthF = 0.55
>> lbres at vpHeightF = 0.075
>>
>> lbres at lbPerimOn = False ; Turn off perimeter.
>> lbres at lbOrientation = "Horizontal" ; Default is vertical.
>> lbres at lbFillColors = colors
>> lbres at lbMonoFillPattern = True ; Fill them all solid.
>> lbres at lbLabelFontHeightF = 0.020 ; Label font height
>> lbres at lbLabelAlignment = "InteriorEdges"
>> lbid = gsn_create_labelbar(wks,dimsizes(levels),levels,lbres) ;
>> create the labelbar
>>
>>
>> amres = True
>> amres at amJust = "BottomCenter"
>> amres at amParallelPosF = 0.0
>> amres at amOrthogonalPosF = 0.75
>> annoid = gsn_add_annotation(plot,lbid,amres) ; attach the labelbar
>> to the plot
>> draw(plot)
>> frame(wks)
>> end
>>
>>
>>
>>
>>
>> On Fri, Jan 11, 2019 at 4:36 AM Anne SEIDENGLANZ <
>> anne.seidenglanz at unive.it> wrote:
>>
>>> Hello,
>>>
>>> I am trying to combine the possibilities in NCL to
>>>
>>> 1) use the a symmetric colorbar using the gsnSpreadColorStart / End
>>> resources (and res at cnLevelSelectionMode = “ManualLevels”)
>>>
>>> and
>>>
>>> 2) forcing white for 1-2 contours in the middle for things like anomaly
>>> fields.
>>>
>>> Since I need a very fine scale, and therefore a lot of contours, setting
>>> them explicitely using res at cnExplicitLevels is not very feasible for
>>> me, and I’m trying to avoid to set these levels each single time.
>>>
>>> So my question is: Is there a way to use gsnSpreadColorStart and
>>> gsnSpreadColorEnd so as to have a symmetric color bar AND having 1-2
>>> contours of white in the middle?
>>> I know there are some white-in-the-middle pre-defined color maps in NCL
>>> but some of them don’t have a fine enough color scale.
>>>
>>> Here’s an example of I have been trying to attempt:
>>>
>>> res at cnLevelSelectionMode = "ManualLevels"
>>> res at cnMinLevelValF = -5
>>> res at cnMaxLevelValF = 5
>>> res at cnLevelSpacingF = 0.25
>>>
>>> res at gsnSpreadColors = True
>>> res at gsnSpreadColorStart = 2
>>> res at gsnSpreadColorEnd = 255
>>>
>>> res at cnLevelSelectionMode := "ExplicitLevels"
>>> res at cnLevels = fspan(-5, 5, 0.25)
>>> res at cnFillColors(20:22) = 1
>>>
>>>
>>> so I tried to overwrite the SelectionMode resource to ‘Explicit’ and
>>> then picking trying to pick only the center conoturs for white.. but
>>> obviously it didn’t work in this way.
>>>
>>> I remember there is some function that does exactly take care of this
>>> but I do not remember which one it was.
>>>
>>>
>>> Any help is appreciated!
>>> Thanks,
>>> Anne
>>>
>>>
>>>
>>>
>>> On 3 Jan 2019, at 18:55, Adam Phillips <asphilli at ucar.edu> wrote:
>>>
>>> Hi David,
>>> There's a function (add_map_tickmarks2) that you can use embedded in
>>> some of the NCL examples that will add tick mark labels to rectangular
>>> projections. I took mptick example #9 here:
>>> http://www.ncl.ucar.edu/Applications/mptick.shtml#ex9
>>> and modified it to (mostly) match your projection. The script can be run
>>> on its' own and runs quickly, making trial and error less painful. I have
>>> attached the modified script and the resulting graphic.
>>> Hope that helps!
>>> Adam
>>>
>>> On Wed, Jan 2, 2019 at 3:08 PM David Hebert, Code 7322 <
>>> david.hebert at nrlssc.navy.mil> wrote:
>>>
>>>> I am attempting to make a regional plot using stereographic projection,
>>>> and limit the projection using ‘corners’. I am getting only longitude
>>>> labels along the bottom and left plot boundary. See attached plot.
>>>>
>>>>
>>>>
>>>> The relevant settings I am using in my script are:
>>>>
>>>>
>>>>
>>>> res at mpProjection = "Stereographic"
>>>>
>>>> res at gsnAddCyclic = False
>>>>
>>>> res at mpGridAndLimbOn = True ; turn on lat/lon lines
>>>>
>>>> res at mpPerimOn = False ; turn off box around
>>>> plot
>>>>
>>>> res at pmTickMarkDisplayMode = "Always" ; turn on ticks
>>>>
>>>>
>>>>
>>>> res at tmYROn = False
>>>>
>>>> res at tmXTOn = False
>>>>
>>>>
>>>>
>>>> res at mpGridLonSpacingF = 15.
>>>>
>>>> res at mpGridLatSpacingF = 2.
>>>>
>>>>
>>>>
>>>> ; set map limits based on tlat,tlon
>>>>
>>>> res at mpLimitMode = "Corners"
>>>>
>>>> res at mpLeftCornerLatF = tlat(0,0)
>>>>
>>>> res at mpLeftCornerLonF = tlon(0,0)
>>>>
>>>> res at mpRightCornerLatF = tlat(nj2-1,ni2-1)
>>>>
>>>> res at mpRightCornerLonF = tlon(nj2-1,ni2-1)
>>>>
>>>> res at mpRelativeCenterLon = True ; set a center lon
>>>>
>>>> res at mpCenterLonF = 180.0
>>>>
>>>> res at mpRelativeCenterLat = True ; set a center lat
>>>>
>>>> res at mpCenterLatF = -90.0 ; center lat
>>>>
>>>>
>>>>
>>>> Any suggestions on how to get the latitude labels on the left axis?
>>>> Thank you for your help!
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *David A. Hebert*
>>>>
>>>> Oceanography Division, Code 7322
>>>> Naval Research Laboratory
>>>> Stennis Space Center, MS 39529
>>>> (228)688-5846; DSN 828-5846
>>>> http://www.nrl.navy.mil
>>>>
>>>>
>>>> _______________________________________________
>>>> ncl-talk mailing list
>>>> ncl-talk at ucar.edu
>>>> List instructions, subscriber options, unsubscribe:
>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>
>>>
>>>
>>> --
>>> Adam Phillips
>>> Associate Scientist, Climate and Global Dynamics Laboratory, NCAR
>>> www.cgd.ucar.edu/staff/asphilli/ 303-497-1726
>>>
>>> <http://www.cgd.ucar.edu/staff/asphilli>
>>> <tickmarks.ncl><mptick.png>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>>
>>>
>>> Nota automatica aggiunta dal sistema di posta.
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>
>>
>> --
>> Adam Phillips
>> Associate Scientist, Climate and Global Dynamics Laboratory, NCAR
>> www.cgd.ucar.edu/staff/asphilli/ 303-497-1726
>>
>> <http://www.cgd.ucar.edu/staff/asphilli>
>>
>
> Nota automatica aggiunta dal sistema di posta.
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190113/fcc096ea/attachment.html>
More information about the ncl-talk
mailing list