[ncl-talk] Panel different sizes plots to equal height

Adam Phillips asphilli at ucar.edu
Mon May 14 13:09:06 MDT 2018


Hi Tabish,
It might be easiest to forego using gsn_panel, and panel the two plots
manually as is shown in panel example #20 here:
http://www.ncl.ucar.edu/Applications/panel.shtml#ex20

As you are currently drawing a labelbar using gsn_panel, you will want to
do this by setting the appropriate resources in the individual resource
list cnres:
cnres at lbLabelBarOn = True
cnres at pmLabelBarHeightF = 0.1
cnres at pmLabelBarWidhtF = 0.8
cnres at lbLabelFontHeightF = 0.020
cnres at pmLabelBarParallelPosF = -0.25    ; This resource shifts the labelbar
left or right, so you can center the labelbar on the page. You will likely
have to go through some trial and error on this setting.

Alternatively, you can draw your own labelbar by calling gsn_labelbar_ndc.
See maps only example #6 here:
http://www.ncl.ucar.edu/Applications/maponly.shtml#ex6

Hope that helps. If you have further questions please respond to the
ncl-talk email list.
Adam



On Mon, May 14, 2018 at 11:46 AM, Tabish Ansari <tabishumaransari at gmail.com>
wrote:

> Hi Adam,
>
> Thanks for your reply.
> The eps figure from the current script is attached.
> I just want to shrink the second figure or expand the first figure to make
> them both same in height without changing the aspect ratio.
>
> Thanks
>
> Tabish
>
> Tabish U Ansari
> PhD student, Lancaster Environment Center
> Lancaster Univeristy
> Bailrigg, Lancaster,
> LA1 4YW, United Kingdom
>
> On 14 May 2018 at 16:25, Adam Phillips <asphilli at ucar.edu> wrote:
>
>> Hi Tabish,
>> It would help the community answer your question if you could attach an
>> image showing your plot.
>> Thanks,
>> Adam
>>
>> On Sun, May 13, 2018 at 4:03 PM, Tabish Ansari <
>> tabishumaransari at gmail.com> wrote:
>>
>>> Hi
>>>
>>> I am trying to panel my WRF domains: domain1 and domain3 which have very
>>> different aspect ratios and sizes. Currently using the following script I'm
>>> able to panel them together but not change their size. I tried using vp
>>> resources but without success. Can you please let me know what changes I
>>> make to this script to make the D03 same in height as D01 without changing
>>> aspect ratios?
>>>
>>> Here's the script:
>>> ; PANELPLOT OF WRF-CHEM D01 AND D03 PM2.5 CONCENTRATIONS CONTOUR MAPS
>>> ALONG WITH OBSERVATIONS
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
>>>
>>> ;----------------------------------------------------------------------
>>> ; Procedure to attach colored markers to an NCL map, given 1D
>>> ; data, and lat/lon arrays, a set of levels, and a color map.
>>> ;----------------------------------------------------------------------
>>> procedure add_obs_markers_to_map(wks,plot,levels,colormap,data_1d,lat_
>>> 1d,lon_1d)
>>> local mkres, nlevels, colors, nlevels, n, ii
>>> begin
>>>
>>> ;---Set resources for the markers
>>>   mkres = True
>>>   mkres at gsMarkerIndex = 16
>>>   mkres at gsMarkerSizeF = 0.0035
>>> ; Based on the levels we had for the contour plot and the colormap used,
>>> ; get an array of colors that span the colormap. This uses the same
>>> ; algorithm that the contour used, so the colors will be identical.
>>> ;
>>>   nlevels = dimsizes(levels)
>>>   colors = span_color_rgba(colormap,nlevels+1)   ; Need one more color
>>> than number of levels
>>>
>>> ;
>>> ; Loop through each level, gather all the data values in the given level
>>> ; range, and add colored markers to the existing map.
>>> ;
>>>   do n=0,nlevels
>>>
>>> ;---These "if" statements are how color contours are handled in NCL.
>>>     if(n.eq.0) then
>>>       ii := ind(data_1d.lt.levels(n))
>>>     else if(n.eq.nlevels) then
>>>       ii := ind(data_1d.ge.levels(n-1))
>>>     else
>>>       ii := ind(data_1d.ge.levels(n-1).and.data_1d.lt.levels(n))
>>>     end if
>>>     end if
>>>     if(any(ismissing(ii))) then
>>>       continue
>>>     end if
>>>
>>> ;---Add the markers
>>>     mkres at gsMarkerColor = colors(n,:)    ; colors is an N x 4 array
>>>     plot@$unique_string("markers")$ = gsn_add_polymarker(wks,plot,lo
>>> n_1d(ii),lat_1d(ii),mkres)
>>>   end do
>>> end
>>>
>>> ;----------------------------------------------------------------------
>>> ; Main code
>>> ;----------------------------------------------------------------------
>>> begin
>>>
>>> ;---Open WRF output file and read data
>>>
>>> DATADir = "/data2/tabish/control-run-so4-ECMWF/"
>>> FILES = systemfunc (" ls -1 " + DATADir + "wrfout_d01_2014-10* ")
>>> numFILES = dimsizes(FILES)
>>>
>>> s=1
>>> a = addfile(FILES(0)+".nc","r"); THIS IS JUST FOR INITIALIZATION OF PM25
>>> ARRAY, IT WILL BE SUBSTRACTED FROM THE SUM IN THE END
>>> pm25init =  a->PM2_5_DRY(15,0,:,:)
>>> pm25sum =  pm25init
>>> times = wrf_user_getvar(a,"times",-1)  ; get all times in the file
>>> ntimes = dimsizes(times)
>>> do it = 16,ntimes-1,1             ; TIME LOOP
>>>     s=s+1
>>>     print("Working on time: " + times(it) )
>>>     pm25sum = pm25sum + a->PM2_5_DRY(it,0,:,:)
>>> end do ; END OF TIME LOOP
>>>
>>> do ifil = 1,numFILES-2             ; FILE LOOP
>>>   a = addfile(FILES(ifil)+".nc","r")   ; Open the next file
>>>   times = wrf_user_getvar(a,"times",-1)  ; get all times in the file
>>>   ntimes = dimsizes(times)
>>>   do it = 0,ntimes-1,1             ; TIME LOOP
>>>     s=s+1
>>>     print("Working on time: " + times(it) )
>>>     pm25sum = pm25sum + a->PM2_5_DRY(it,0,:,:)
>>>   end do ; END OF TIME LOOP
>>> end do
>>>
>>> a = addfile(FILES(numFILES-1)+".nc","r")   ; Open the next file
>>>   times = wrf_user_getvar(a,"times",-1)  ; get all times in the file
>>>   ntimes = dimsizes(times)
>>>   do it = 0,16,1             ; TIME LOOP
>>>     s=s+1
>>>     print("Working on time: " + times(it) )
>>>     pm25sum = pm25sum + a->PM2_5_DRY(it,0,:,:)
>>>   end do ; END OF TIME LOOP
>>>
>>> pm25_avg=  pm25sum/s
>>> pm25_avg at description = "PM2.5 conc in ug/m3"
>>>
>>>   lat2d = wrf_user_getvar(a,"XLAT",it)   ; latitude/longitude
>>>   lon2d = wrf_user_getvar(a,"XLONG",it)
>>>
>>>   pm25_avg at lat2d = lat2d    ; for plotting
>>>   pm25_avg at lon2d = lon2d
>>> ;---Will use this for contours and filled markers
>>>   colormap = "BlAqGrYeOrReVi200"
>>>   ;levels   = ispan(0,180,9)
>>>   levels   = (/0,2,5,10,15,20,25,30,35,40,4
>>> 5,50,55,60,65,70,80,90,100,110,160,200/)
>>>
>>>   wks = gsn_open_wks("x11","wrf_obs_d01-d03_pm25")
>>>
>>> ;---Common resources shared by both contour plot and marker plot
>>>   res                        = True
>>>   res at gsnMaximize            = True
>>>   res at gsnLeftString          = ""
>>>   res at gsnRightString         = ""
>>>
>>>   res at mpDataBaseVersion      = "MediumRes"
>>>  ; res at mpFillOn               = False
>>>  ; res at mpMinLatF              = min(pm25_avg at lat2d)
>>>  ; res at mpMaxLatF              = max(pm25_avg at lat2d)
>>>  ; res at mpMinLonF              = min(pm25_avg at lon2d)
>>>  ; res at mpMaxLonF              = max(pm25_avg at lon2d)
>>>  ; res at pmTickMarkDisplayMode  = "Always"      ; better map tickmarks
>>>
>>>  res at mpLimitMode       = "Corners"            ; choose range of map
>>>  res at mpLeftCornerLatF  = 51.8
>>>  res at mpLeftCornerLonF  = 82.6
>>>  res at mpRightCornerLatF = 22.66
>>>  res at mpRightCornerLonF = 130.499
>>>  res at mpProjection         = "LambertConformal"
>>>  res at mpLambertParallel1F = 20
>>>  res at mpLambertParallel2F = 50
>>>  res at mpLambertMeridianF  = 110
>>>
>>>
>>>
>>> ;---Resources for filled contour plot
>>>   cnres                      = res
>>>   cnres at cnFillOn             = True
>>>   cnres at cnLevelSelectionMode = "ExplicitLevels"
>>>   cnres at cnLevels             = levels
>>>   cnres at cnFillPalette        = colormap
>>>   cnres at cnLinesOn            = False
>>>   cnres at cnLineLabelsOn       = False
>>>   cnres at lbLabelBarOn         = False   ; will add in panel later
>>>   cnres at pmTitleZone          = 2       ; move title down
>>>   cnres at gsnAddCyclic         = False
>>>   cnres at mpLimitMode       = "Corners"            ; choose range of map
>>>   cnres at mpLeftCornerLatF  = 51.8
>>>   cnres at mpLeftCornerLonF  = 82.6
>>>   cnres at mpRightCornerLatF = 22.66
>>>   cnres at mpRightCornerLonF = 130.499
>>>   cnres at mpProjection         = "LambertConformal"
>>>   cnres at mpLambertParallel1F = 20
>>>   cnres at mpLambertParallel2F = 50
>>>   cnres at mpLambertMeridianF  = 110
>>>
>>>   cnres at mpFillOn                    =  True
>>>   cnres at mpOutlineDrawOrder          = "PostDraw"
>>>   cnres at mpFillDrawOrder             = "PreDraw"
>>>  ; cnres at mpOutlineBoundarySets       = "National"
>>>   cnres at mpOutlineBoundarySets       = "Allboundaries"
>>>   cnres at mpUSStateLineDashPattern    = 2
>>>   cnres at mpOutlineOn           = True
>>>   cnres at mpDataBaseVersion        = "MediumRes"
>>>   cnres at mpDataSetName            = "Earth..4"      ; U.S. counties
>>>   ;cnres at mpGridAndLimbOn = True
>>>   ;cnres at mpGridLineColor = "Grey"
>>>   cnres at mpFillColors = (/"transparent","transparent",
>>> "gray","transparent"/)
>>>   cnres at pmTickMarkDisplayMode = "Always"
>>>   cnres at tiMainString = "Domain 1 @ 27km"
>>>   cnres at tiDeltaF = 3.3
>>>   cnres at tfDoNDCOverlay = True
>>>
>>>   cnres at gsnDraw  = False                          ; don't draw
>>>   cnres at gsnFrame = False                          ; don't advance frame
>>>
>>> ; cnres at vpWidthF         = 0.40
>>>  cnres at vpHeightF        = 0.20
>>>
>>> ;---Create smooth contour plot
>>>   plot_wrf_d01 = gsn_csm_contour_map(wks,pm25_avg,cnres)
>>>
>>>
>>> delete(pm25init)
>>> delete(pm25sum)
>>> delete(pm25_avg)
>>> delete(s)
>>> delete(lat2d)
>>> delete(lon2d)
>>> ;----------------------------------------------------------------------
>>> ; Recreate similar plot, but by using filled markers drawn over a map.
>>> ;----------------------------------------------------------------------
>>>  fname = "surfacedata_12-31_Octmean_improved_nomissingval.txt"
>>>   lines = asciiread(fname,-1,"string")
>>>   lon = tofloat(str_get_field(lines(:),2," "))
>>>   lat = tofloat(str_get_field(lines(:),3," "))
>>>   pm25 = tofloat(str_get_field(lines(:),4," "))
>>>
>>>
>>> ;*****************************************
>>> ; add black circles over obs data
>>> ;*****************************************
>>>   polyres               = True          ; poly marker mods desired
>>>   polyres at gsMarkerIndex = 4            ; choose circle as polymarker
>>>   polyres at gsMarkerSizeF = 5           ; select size to avoid streaking
>>>   polyres at gsMarkerColor = (/"black"/)   ; choose color
>>>   polyres at gsMarkerThicknessF  = 2.0
>>>   tabish1=gsn_add_polymarker(wks,plot_wrf_d01,lon,lat,polyres)  ; draw
>>> polymarkers
>>>
>>> ;---Add colored markers to the map
>>>   add_obs_markers_to_map(wks,plot_wrf_d01,levels,colormap,pm25,lat,lon)
>>>
>>> ;  draw(plot_wrf)
>>> ;  frame(wks)
>>>
>>> ;***********************************************
>>> ; NOW REPEATING THE SAME ROUTINE FOR D03
>>> ;***********************************************
>>>
>>>
>>>   DATADir = "/data2/tabish/control-run-so4-ECMWF/"
>>> FILES = systemfunc (" ls -1 " + DATADir + "wrfout_d03_2014-10* ")
>>> numFILES = dimsizes(FILES)
>>>
>>> s=1
>>> a = addfile(FILES(0)+".nc","r"); THIS IS JUST FOR INITIALIZATION OF PM25
>>> ARRAY, IT WILL BE SUBSTRACTED FROM THE SUM IN THE END
>>> pm25init =  a->PM2_5_DRY(15,0,:,:)
>>> pm25sum =  pm25init
>>> times = wrf_user_getvar(a,"times",-1)  ; get all times in the file
>>> ntimes = dimsizes(times)
>>> do it = 16,ntimes-1,1             ; TIME LOOP
>>>     s=s+1
>>>     print("Working on time: " + times(it) )
>>>     pm25sum = pm25sum + a->PM2_5_DRY(it,0,:,:)
>>> end do ; END OF TIME LOOP
>>>
>>> do ifil = 1,numFILES-2             ; FILE LOOP
>>>   a = addfile(FILES(ifil)+".nc","r")   ; Open the next file
>>>   times = wrf_user_getvar(a,"times",-1)  ; get all times in the file
>>>   ntimes = dimsizes(times)
>>>   do it = 0,ntimes-1,1             ; TIME LOOP
>>>     s=s+1
>>>     print("Working on time: " + times(it) )
>>>     pm25sum = pm25sum + a->PM2_5_DRY(it,0,:,:)
>>>   end do ; END OF TIME LOOP
>>> end do
>>> pm25_avg= pm25sum/s
>>> ;pm25_avg at description = "NO2 conc in ppbv"
>>>
>>>   lat2d = wrf_user_getvar(a,"XLAT",it)   ; latitude/longitude
>>>   lon2d = wrf_user_getvar(a,"XLONG",it)
>>>
>>>   pm25_avg at lat2d = lat2d    ; for plotting
>>>   pm25_avg at lon2d = lon2d
>>>  res at mpLimitMode       = "Corners"            ; choose range of map
>>>  res at mpLeftCornerLatF  = 36.05806
>>>  res at mpLeftCornerLonF  = 113.3356
>>>  res at mpRightCornerLatF = 42.4514
>>>  res at mpRightCornerLonF = 120.2583
>>>   cnres at mpLimitMode       = "Corners"            ; choose range of map
>>>   cnres at mpLeftCornerLatF  = 36.05806
>>>   cnres at mpLeftCornerLonF  = 113.3356
>>>   cnres at mpRightCornerLatF = 42.4514
>>>   cnres at mpRightCornerLonF = 120.2583
>>> cnres at tiMainString = "Domain 3 @ 3km"
>>> cnres at vpKeepAspect = True
>>>  cnres at vpHeightF        = 0.20
>>>
>>> ;---Create smooth contour plot
>>>   plot_wrf_d03 = gsn_csm_contour_map(wks,pm25_avg,cnres)
>>> ;*****************************************
>>> ; add black circles over obs data
>>> ;*****************************************
>>>   polyres               = True          ; poly marker mods desired
>>>   polyres at gsMarkerIndex = 4            ; choose circle as polymarker
>>>   polyres at gsMarkerSizeF = 5           ; select size to avoid streaking
>>>   polyres at gsMarkerColor = (/"black"/)   ; choose color
>>>   polyres at gsMarkerThicknessF  = 2.0
>>> tabish3=gsn_add_polymarker(wks,plot_wrf_d03,lon,lat,polyres)  ; draw
>>> polymarkers
>>>
>>> ;---Add colored markers to the map
>>>   add_obs_markers_to_map(wks,plot_wrf_d03,levels,colormap,pm25,lat,lon)
>>>
>>>
>>> ;---Panel both plots for comparison.
>>>   pres                    = True
>>>   pres at gsnMaximize        = True
>>>   pres at gsnPanelLabelBar   = True
>>>   pres at pmLabelBarWidthF   = 0.8
>>>   pres at lbLabelFontHeightF = 0.01
>>>   pres at gsnFrame = False
>>>   pres at gsnPanelBottom   = 0.05                   ; add space at bottom
>>>   gsn_panel(wks,(/plot_wrf_d01,plot_wrf_d03/),(/1,2/),pres)
>>>
>>> ; Draw a text string at the bottom
>>>   txres               = True
>>>   txres at txFontHeightF = 0.012
>>>   gsn_text_ndc(wks,"PM2.5 in ug/m3",0.5,0.28,txres)
>>>   frame(wks)
>>> ; Maximize plots in frame.
>>> ; psres = True
>>> ; maximize_output(wks,psres)  ; calls draw and frame for you
>>>
>>>
>>> end
>>>
>>>
>>> Your help will be greatly appreciated.
>>>
>>> Thanks
>>>
>>> Tabish
>>>
>>>
>>> Tabish U Ansari
>>> PhD student, Lancaster Environment Center
>>> Lancaster Univeristy
>>> Bailrigg, Lancaster,
>>> LA1 4YW, United Kingdom
>>>
>>> _______________________________________________
>>> 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>
>>
>
>


-- 
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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180514/12117d4b/attachment.html>


More information about the ncl-talk mailing list