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

Adam Phillips asphilli at ucar.edu
Mon May 14 09:25:39 MDT 2018


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


More information about the ncl-talk mailing list