[ncl-talk] multi-panel wkSpaceTime

Dennis Shea shea at ucar.edu
Mon Feb 6 15:39:06 MST 2017


Hello,

A paneled Space-Time plot via NCL. Note the driver is a function not a
procedure. You (the user) can panel as desired.

A script, sample data file and resultant figure my be obtained at:

ftp ftp.cgd.ucar.edu
anonymous
your_email
cd wkSpaceTime
prompt
ls
mget *
quit

Cheers

-rw-r--r-- 1 shea cgdcas   139916 Feb  6 15:32 diagnostics_cam_panel.ncl_new
-rw-r--r-- 1 shea cgdcas 30699392 Feb  6 15:32 OLR.12hr_2yrs.wheeler.nc
-rw-r--r-- 1 shea cgdcas   260095 Feb  6 15:33 SpaceTimePanel.png
-rw-r--r-- 1 shea cgdcas     3049 Feb  6 15:32 wkSpaceTime_1.ncl_panel


On Sun, Jan 29, 2017 at 9:56 AM, Mary Haley <haley at ucar.edu> wrote:

> To add this this, you may need to make sure that anything that's attached
> to a plot via a gsn_add_text or gsn_add_polyline call continues to "live"
> outside the script that it was called from. This means that the unique id
> returned from each of these calls must be attached as an attribute to the
> plot.
>
> For example, in the procedure "addHorVertLines", you have this code:
>
> begin
>     gsres = True
>     gsres at gsLineDashPattern = 1
>
>     gsn_polyline(wks, plot, x1,y1,gsres)
>     gsn_polyline(wks, plot, x1,y2,gsres)
>     gsn_polyline(wks, plot, x1,y3,gsres)
>     gsn_polyline(wks, plot, x2,y4,gsres)
>
>     txres        = True
>     txres at txJust = "CenterLeft"
>     txres at txFontHeightF = 0.013
>
>     gsn_text(wks, plot, "3 days" ,-14.7,.345,txres)
>     gsn_text(wks, plot, "6 days" ,-14.7,.175,txres)
>     gsn_text(wks, plot, "30 days",-14.7,.045,txres)
> end
>
> which needs to have all the gsn_polyline and gsn_text calls changed to
> gsn_add_polyline and gsn_add_text, but they also need to be returned from
> this procedure. You can use "unique_string" to generate a unique id each
> time:
>
> begin
>     gsres = True
>     gsres at gsLineDashPattern = 1
>
>     plot@$unique_string("poly")$ = gsn_add_polyline(wks, plot,
> x1,y1,gsres)
>     plot@$unique_string("poly")$ = gsn_add_polyline(wks, plot,
> x1,y2,gsres)
>     plot@$unique_string("poly")$ = gsn_add_polyline(wks, plot,
> x1,y3,gsres)
>     plot@$unique_string("poly")$ = gsn_add_polyline(wks, plot,
> x2,y4,gsres)
>
>     txres        = True
>     txres at txJust = "CenterLeft"
>     txres at txFontHeightF = 0.013
>
>     plot@$unique_string("text")$ = gsn_add_text(wks, plot, "3 days"
> ,-14.7,.345,txres)
>     plot@$unique_string("text")$ = gsn_add_text(wks, plot, "6 days"
> ,-14.7,.175,txres)
>     plot@$unique_string("text")$ = gsn_add_text(wks, plot, "30
> days",-14.7,.045,txres)
> end
>
> You can also do it like this, for slightly cleaner code, but it does
> require that you create some arrays ahead of time with "new" to hold all
> the text and polylines being added:
>
> ;---Create arrays to hold polylines and text
> polyid = new(4,graphic)
>     textid = new(3,graphic)
>
>     polyid(0) = gsn_add_polyline(wks, plot, x1,y1,gsres)
>     polyid(1) = gsn_add_polyline(wks, plot, x1,y2,gsres)
>     polyid(2) = gsn_add_polyline(wks, plot, x1,y3,gsres)
>     polyid(3) = gsn_add_polyline(wks, plot, x2,y4,gsres)
>
>     txres        = True
>     txres at txJust = "CenterLeft"
>     txres at txFontHeightF = 0.013
>
>     textid(0) = gsn_add_text(wks, plot, "3 days" ,-14.7,.345,txres)
>     textid(1) = gsn_add_text(wks, plot, "6 days" ,-14.7,.175,txres)
>     textid(2) = gsn_add_text(wks, plot, "30 days",-14.7,.045,txres)
>
> ;---Make sure polyid and textid continue to "live" outside this procedure
>
>     plot at unique_string("poly") = polyid
>     plot at unique_string("text") = textid
>
> See the attached diagnostics_cam_panel.ncl. This is UNTESTED, but
> hopefully it gives you an idea where to start.
>
> --Mary
>
>
> On Sat, Jan 28, 2017 at 8:54 AM, Dennis Shea <shea at ucar.edu> wrote:
>
>> When I wrote the functions, my focus was on doing the computations and
>> graphics correctly. Paneling the graphics was not a priority. To be honest,
>> I did not even think about paneling. :-(
>>
>> It would be possible to restructure ('refactor') the code. However, it
>> would require some time and .effort.
>> [1] copy the code:
>>      cp $NCARG_ROOT/lib/ncarg/nclscripts/csm/diagnostics_cam.ncl
>> diagnostics_cam.panel.ncl
>>
>> [2] Change the local code: add 'res at gsnDraw=False' in multiple places;
>> change 'polyline' procedure calls to the 'gsn_add_polyline' functions, etc
>>
>> ---
>>
>> Perhaps, using Imagemagick's  'convert' tool.
>>
>> %> convert <return>
>>
>> See the -append /+append options
>>
>> I have not used the 'append' option very often. 'convert' has other
>> options that may also be of use.  See:
>>
>>         http://www.imagemagick.org/Usage/layers/
>>
>> This link has numerous examples.
>>
>> ------
>>
>> Consider image1.png, image2.png, image3.png, image4.png
>>
>> %> convert -append image1.png image2.png IMAGE_12.TopBottom.png
>> %> display IMAGE_12.TopBottom.png
>>
>> %> convert -append image3.png image4.png IMAGE_34.TopBottom.png
>> %> display IMAGE_34.TopBottom.png
>>
>> %> convert +append IMAGE_12.TopBottom.png  IMAGE_34.TopBottom.png
>> IMAGE_2x2.png
>> %> display IMAGE_2x2.png
>>
>> ---
>> This type of thing could be invoked within an NCL script to save manually
>> doing it. How?
>> After the 'image[1-4].png' have been created .... EG
>>
>>  wkSpaceTime (u,  diro, case, VAR, ,latBound, spd , nDayWin, nDaySkip, opt  ) ; create images
>>
>>   system("convert -append   image1.png   image2.png
>> IMAGE_12.TopBottom.png")
>>   system("convert -append   image3.png   image4.png
>> IMAGE_34.TopBottom.png")
>>   system("convert +append IMAGE_12.TopBottom.png  IMAGE_34.TopBottom.png
>> IMAGE_2x2.png")
>>   system("rm IMAGE*TopBottom.png")
>>
>> ---
>> Two on top; one at bottom
>>
>> %> convert +append image1.png image2.png IMAGE_12.LeftRight.png
>> %> display IMAGE_12.LeftRight.png
>>
>> %> convert -append IMAGE_12.LeftRight.png   image3.png IMAGE_123.png
>> %> display IMAGE_123.png
>>
>> I am sure you can 'center' the bottom figure but I'll leave that up to
>> you.  :-)
>>
>> ----
>> From the above link: 10 figures
>>
>> convert \( font_1.gif font_2.gif font_3.gif +append \) \
>>              \( font_4.gif font_5.gif font_6.gif +append \) \
>>              \( font_7.gif font_8.gif font_9.gif +append \) \
>>              \( -size 32x32 xc:none  font_0.gif +append \) \
>>                -background none -append   append_array.gif
>>
>>
>>
>> I hope it works for you.
>>
>> Good luck
>> D
>>
>>
>>
>>
>> On Fri, Jan 27, 2017 at 5:45 PM, Millie J <millie.jyo at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> Is there a way to plot the Wheeler-Kiladis space-time spectra (Figs. 1
>>> to 3), for multiple model outputs, on a single graphic plot? Thanks.
>>> Jyothi
>>>
>>>
>>> Jyothi Nattala
>>> GMAO / NASA GSFC
>>>
>>> _______________________________________________
>>> 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
>>
>>
>
> _______________________________________________
> 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/20170206/fbb0eb67/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SpaceTimePanel.png
Type: image/png
Size: 260095 bytes
Desc: not available
Url : http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170206/fbb0eb67/attachment.png 


More information about the ncl-talk mailing list