[ncl-talk] panel_33.ncl

Mary Haley haley at ucar.edu
Wed Nov 28 07:57:22 MST 2018


Hi Barry,

I believe gsn_panel should try to figure out the space for you, but if for
some reason it is not working properly, then you can always force some
extra space at the bottom by setting the gsnPanelBottom panel resource to a
small value like 0.1.

If you could send me a script that illustrates the problem, then I'll look
into this. It would also help to see the image so I have an idea what the
layout and size of the plots are.

--Mary


On Tue, Nov 27, 2018 at 12:17 PM Barry Lynn <barry.h.lynn at gmail.com> wrote:

> Hello:
>
> I just had a similar problem with a lack of space for the label bar.
>
> I plotted 8 panels on a page (all the same size).  The label bar was left
> on the bottom (with numbers), but there was no label.
>
> I ended up putting the label on the side of the bar.
>
>
>
> On Tue, Nov 27, 2018 at 9:10 PM Mary Haley <haley at ucar.edu> wrote:
>
>> Hi Laura,
>>
>> Since paneling two sets of contour plots each with their own labelbar, is
>> a common question, I decided to try to make this easier by creating a
>> "panel_two_sets" function.
>>
>> This function calculates the gsnPanelTop / Bottom  / Left / Right values
>> for you.  It also creates the labelbars and will figure out the proper
>> layout of the plots based on whether you have a vertical or horizontal
>> orientation.
>>
>> See panel_15.ncl,. panel_18.ncl, panel_33.ncl, panel_5x2_33.ncl,  and
>> panel_34.ncl all of which now use this function.
>>
>> http://www.ncl.ucar.edu/Applications/panel.shtml
>>
>> The "panel_two_sets" procedure is sort of like gsn_panel, except now you
>> give it two sets of plots to panel, each with their own dimensions for
>> paneling and their own panel resources.  There's a third resource list that
>> is solely for setting the gsnPanelXXXX values, if needed
>>
>> The call to this function would look something like this, if no extra
>> resources were set:
>>
>> ;---Panel the two sets of plots
>>     dims1 = (/5,3/)   ; 5 rows, 3 columns
>>     dims2 = (/2,3/)   ; 2 rows, 3 columns
>>
>>     pres1 = True
>>     pres2 = True
>>     pres  = True
>>
>>     panel_two_sets(wks,plots,diff_plots,dims1,dims2,pres1,pres2,pres)
>>
>>
>> In the above case, since the number of rows are the same for both plots,
>> the function is going put the first set of plots on the left, and the
>> second set on the right, each with a vertical labelbar.
>>
>> One gotcha that I'm struggling with, is getting the two labelbars to line
>> up. They will line up just fine if the longest label in both label bars is
>> roughly the same size.  But, if you have one labelbar with small width
>> labels, like "1", "2", and "3", and then the second labelbar has labels
>> like "1000", "2000", etc, they will be slightly shifted from each other. I
>> think this is because the labelbars are being centered in that space, and
>> there's no resource that turns this feature off.  I'm going to look into
>> this more, because it's been bothering me for years trying to figure out
>> how to control these labels!
>>
>> --Mary
>>
>>
>> On Tue, Nov 20, 2018 at 12:26 PM Laura Fowler <laura at ucar.edu> wrote:
>>
>>> Hi Mary:
>>> Thanks. This is indeed very confusing to me. For instance, in
>>> panel_33_mod.ncl, if I comment out the lines (see lines below) but keep
>>> panelid1 and maximize_output, then I get the following png file (see
>>> attached). I thought it was just going to plot the top six figures but it
>>> added an other figure at the bottom.
>>>
>>> So I am not sure what the combination of gsn_panel_return with
>>> maximize_output does. And I did not find documentation on the 2 functions.
>>>
>>> Cheers,
>>> Laura
>>>
>>>
>>> ;    bb     = NhlGetBB(plots(nyears_cols:))
>>>
>>> ;    bottom = min(bb(:,1))
>>>
>>> ;    top    = max(bb(:,0))
>>>
>>> ;    height = (top-bottom)
>>>
>>> ;    print("--- bottom = "+bottom)
>>>
>>> ;    print("--- top    = "+top)
>>>
>>> ;    print("--- height = "+height)
>>>
>>>
>>>
>>>
>>> ;---Panel the difference plots at the bottom
>>>
>>> ;    delete(pres at gsnPanelMainString)
>>>
>>> ;    pres at gsnPanelTop       := bottom - 0.01   ; the 0.01 gives a
>>> little spaces b/w the two sets of plots
>>>
>>> ;    pres at gsnPanelBottom    := pres at gsnPanelTop - height
>>>
>>> ;    pres at lbBoxEndCapStyle  = "TriangleBothEnds"
>>>
>>> ;    pres at pmLabelBarHeightF = (pres at gsnPanelTop - pres at gsnPanelBottom)
>>> * 0.8
>>>
>>>
>>> ;    panelid2 =
>>> gsn_panel_return(wks,diff_plots,(/nyears_rows-1,nyears_cols/),pres)
>>>
>>>
>>> ;    drawNDCGrid(wks)
>>>
>>> ;    draw(wks)
>>>
>>> ;    frame(wks)
>>>
>>> On Tue, Nov 20, 2018 at 10:29 AM Mary Haley <haley at ucar.edu> wrote:
>>>
>>>> Hi Laura,
>>>>
>>>> This is an excellent question.
>>>>
>>>> It is a bit of black magic trying to get the plots to panel correctly.
>>>> gsn_panel could really stand an overhaul to make it work better in this
>>>> regard.
>>>>
>>>> Part of the issue is that gsn_panel always wants to expand the plots to
>>>> fit in the given area. This does not include the title or the side
>>>> labelbars, just the plots.
>>>>
>>>> The "given area" is what's defined by gsnPanelBottom, gsnPanelTop,
>>>> gsnPanelLeft, and gsnPanelRight, which by default form a square with values
>>>> 0, 1, 0, and 1.
>>>>
>>>> If you are plotting a set of 3x4 plots and another set of 1x3 plots,
>>>> then you need to set up the two panel areas for the two sets of plots to
>>>> have the correct ratio as the plots you have. For example, for a 3x4 plot
>>>> and a 1x4 plot, you want to have 3x as much height for the 3x4 plot as the
>>>> 1x4 plot.  If you had a 2x5 and 3x5 set of plots, then the 2x5 plots need
>>>> to take up 2/5 of the total height, and the 3x5 plots 3/5 of the height.
>>>>
>>>> It gets more complicated because when you add in a title or a labelbar,
>>>> then you need to leave space for those.
>>>>
>>>> I will try to come up with an example for you today. This is something
>>>> I've been meaning to do.
>>>>
>>>> --Mary
>>>>
>>>> On Tue, Nov 20, 2018 at 6:46 AM Laura Fowler <laura at ucar.edu> wrote:
>>>>
>>>>> Hi Mary:
>>>>>
>>>>> Many thanks for taking the time to rework the script. Using
>>>>> panel_33_mod.ncl, I was able to modify my script to produce the plot I
>>>>> needed (see attached totPREC.png and test.ncl in
>>>>> /gpfs/fs1/scratch/laura/MPASprojects2018/MPAS.cu_shallow/novemberPUBLICATION/precipitation_figs).
>>>>> I need a little more work to align DEC 2015 and JUN 2016 to their
>>>>> respective columns).
>>>>>
>>>>> I further modified test.ncl (test2.ncl in the same directory) to
>>>>> remove one row from the top panel so that I can have 2 panels of two rows
>>>>> with one color bar for each panel. I do not understand the logic on how to
>>>>> modify res at gsnPanelBottom to make this work on a more systematic
>>>>> basic. It seems like there is a lot of "guessing" in doing this?
>>>>>
>>>>> Thanks,
>>>>> Laura
>>>>>
>>>>>
>>>>> On Sat, Nov 17, 2018 at 1:59 PM Mary Haley <haley at ucar.edu> wrote:
>>>>>
>>>>>> Hi Laura,
>>>>>>
>>>>>> Try this script. I cleaned up the logic of the panelling to base the
>>>>>> size of the difference plots on the area used for the top set of plots.
>>>>>>
>>>>>> I included a subset of the data file so you can run the modified
>>>>>> script.
>>>>>>
>>>>>> I'll include this on the panel page later. I'll also clean up the
>>>>>> panel_33.ncl to be more user friendly to modify.
>>>>>>
>>>>>> --Mary
>>>>>>
>>>>>>
>>>>>> On Sat, Nov 17, 2018 at 4:29 AM Rashed Mahmood <
>>>>>> rashidcomsis at gmail.com> wrote:
>>>>>>
>>>>>>> I think the first issue is related to setting the bottom limit for
>>>>>>> the first set of plots:
>>>>>>>
>>>>>>>     resP at gsnPanelBottom    = 0.33              ; or something similar
>>>>>>>
>>>>>>> The second issue is likely related to maximize_output(wks,True) that would try to use maximum available space. May be you can try commenting this.
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>> Rashed
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Nov 16, 2018 at 1:16 PM Laura Fowler <laura at ucar.edu> wrote:
>>>>>>>
>>>>>>>> Hello:
>>>>>>>>
>>>>>>>> I am trying to produce a panel plot that looks like panel_33.ncl
>>>>>>>> but instead of having 2 rows for the actual fields, I have 3 rows, and
>>>>>>>> instead of having 1 row for the difference fields, I have 2 rows. I have
>>>>>>>> two issues: The first issue is that I am running out of room on the page to
>>>>>>>> plot the last 2 rows and I do not know what to do next? The second issue
>>>>>>>> that the top 3 rows are plotted in a landscape mode although I set:
>>>>>>>>
>>>>>>>> resP at gsnPaperOrientation = "portrait"
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Here is the script that I used after I created my 10 individual
>>>>>>>> plots:
>>>>>>>>
>>>>>>>>
>>>>>>>> ;--- create panel plot:
>>>>>>>>
>>>>>>>> resP = True
>>>>>>>>
>>>>>>>> resP at gsnDraw             = False
>>>>>>>>
>>>>>>>> resP at gsnFrame            = False
>>>>>>>>
>>>>>>>> resP at gsnPanelLabelBar    = True
>>>>>>>>
>>>>>>>> resP at gsnPaperOrientation = "portrait"
>>>>>>>>
>>>>>>>>
>>>>>>>> resP at lbOrientation      = "vertical"
>>>>>>>>
>>>>>>>> resP at lbLabelFontHeightF = 0.01
>>>>>>>>
>>>>>>>> ;resP at pmLabelBarWidthF  = 0.075
>>>>>>>>
>>>>>>>> ;resP at pmLabelBarHeightF = 0.40
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> panelid1 = gsn_panel_return(wks,plots(0:5),(/3,2/),resP)
>>>>>>>>
>>>>>>>> bb = NhlGetBB(panelid1)
>>>>>>>>
>>>>>>>> top    = max(bb(:,0))
>>>>>>>>
>>>>>>>> bottom = min(bb(:,1))
>>>>>>>>
>>>>>>>> height = (top-bottom)/3.
>>>>>>>>
>>>>>>>> print("--- top    = "+top)
>>>>>>>>
>>>>>>>> print("--- bottom = "+bottom)
>>>>>>>>
>>>>>>>> print("--- height = "+height)
>>>>>>>>
>>>>>>>> print(" ")
>>>>>>>>
>>>>>>>>
>>>>>>>> ;resP at gsnPanelTop   = bottom-0.01    ; lower 1/3 plus some white
>>>>>>>> space
>>>>>>>>
>>>>>>>> resP at gsnPanelTop    = bottom
>>>>>>>>
>>>>>>>> resP at gsnPanelBottom = resP at gsnPanelTop - height
>>>>>>>>
>>>>>>>> print("--- gsnPanelTop = "+resP at gsnPanelTop)
>>>>>>>>
>>>>>>>> print("--- gsnPanelBot = "+resP at gsnPanelBottom)
>>>>>>>>
>>>>>>>>
>>>>>>>> ;panelid2 = gsn_panel_return(wks,plots(6:9),(/2,2/),resP)
>>>>>>>>
>>>>>>>> maximize_output(wks,True)
>>>>>>>>
>>>>>>>>
>>>>>>>> ;resP at gsnDraw             = True
>>>>>>>>
>>>>>>>> ;resP at gsnFrame            = False
>>>>>>>>
>>>>>>>> ;gsn_panel(wks,plots(0:5),(/3,2/),resP)
>>>>>>>>
>>>>>>>> ;frame(wks)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> When print gsnPanelTop and gsnPanelBottom, I get:
>>>>>>>>
>>>>>>>>
>>>>>>>> (0) --- end create individual plot:
>>>>>>>>
>>>>>>>> (0)
>>>>>>>>
>>>>>>>> (0) --- top    = 0.889811
>>>>>>>>
>>>>>>>> (0) --- bottom = 0.110189
>>>>>>>>
>>>>>>>> (0) --- height = 0.259874
>>>>>>>>
>>>>>>>> (0)
>>>>>>>>
>>>>>>>> (0) --- gsnPanelTop = 0.110189
>>>>>>>>
>>>>>>>> (0) --- gsnPanelBot = -0.149686
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I am lost as what to do next. Help and suggestions would be greatly
>>>>>>>> appreciated.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Laura
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>> !-------------------------------------------------------------------------------------------------------------
>>>>>>>> Laura D. Fowler
>>>>>>>>
>>>>>>>> Mesoscale and Microscale Meteorology Division (MMM)
>>>>>>>> National Center for Atmospheric Research
>>>>>>>> P.O. Box 3000, Boulder CO 80307-3000
>>>>>>>>
>>>>>>>> e-mail: laura at ucar.edu
>>>>>>>> phone: 303-497-1628
>>>>>>>>
>>>>>>>>
>>>>>>>> !-------------------------------------------------------------------------------------------------------------
>>>>>>>> _______________________________________________
>>>>>>>> ncl-talk mailing list
>>>>>>>> ncl-talk at ucar.edu
>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> ncl-talk mailing list
>>>>>>> ncl-talk at ucar.edu
>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> !-------------------------------------------------------------------------------------------------------------
>>>>> Laura D. Fowler
>>>>>
>>>>> Mesoscale and Microscale Meteorology Division (MMM)
>>>>> National Center for Atmospheric Research
>>>>> P.O. Box 3000, Boulder CO 80307-3000
>>>>>
>>>>> e-mail: laura at ucar.edu
>>>>> phone: 303-497-1628
>>>>>
>>>>>
>>>>> !-------------------------------------------------------------------------------------------------------------
>>>>>
>>>>
>>>
>>> --
>>>
>>> !-------------------------------------------------------------------------------------------------------------
>>> Laura D. Fowler
>>>
>>> Mesoscale and Microscale Meteorology Division (MMM)
>>> National Center for Atmospheric Research
>>> P.O. Box 3000, Boulder CO 80307-3000
>>>
>>> e-mail: laura at ucar.edu
>>> phone: 303-497-1628
>>>
>>>
>>> !-------------------------------------------------------------------------------------------------------------
>>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>
>
> --
> Barry H. Lynn, Ph.D
> Senior Associate Scientist, Lecturer,
> The Institute of the Earth Science,
> The Hebrew University of Jerusalem,
> Givat Ram, Jerusalem 91904, Israel
> Tel: 972 547 231 170
> Fax: (972)-25662581
>
> C.E.O, Weather It Is, LTD
> Weather and Climate Focus
> http://weather-it-is.com
> Jerusalem, Israel
> Local: 02 930 9525
> Cell: 054 7 231 170
> Int-IS: x972 2 930 9525
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20181128/bfcdb093/attachment.html>


More information about the ncl-talk mailing list