[ncl-talk] Scaling unequally sized plots to the same height in panelplot
Tabish Ansari
tabishumaransari at gmail.com
Sun Feb 7 17:55:56 MST 2021
Hi
I'm trying to create a 3x4 panelplot. Each plot is a contour map generated
from WRF model data. Since each row represents a similar quantity, I'm
using a common labelbar for each row, which means I have a total of 3 label
bars for this panelplot which are made visible for the 4th, 8th and 12th
plots and turned off for all other plots. However, since the rightmost
plots include the labelbars, NCL detects their overall size differently
which leads to different sizing of the maps in the panel.
Please see the attached plot.
Here's the snippet of the graphics part of the code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PLOTTING
OPTIONS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
type = "pdf"
wks = gsn_open_wks(type,"NOCOVOC_D02_sectoralemissions-panel") ;
Create a plot workstation
gsn_define_colormap(wks,"BlAqGrYeOrReVi200")
;gsn_define_colormap(wks,"WhiteYellowOrangeRed")
;gsn_define_colormap(wks,"hotres")
;gsn_define_colormap(wks,"MPL_Reds")
; Set some basic resources
res = True
pltres = True
mpres = True
res at cnFillOn = True ; Create a color fill plot
pltres at PanelPlot = True
res at NoHeaderFooter = True ; Switch headers and
footers off
mpres at mpOutlineOn = True ; Turn on map outlines
mpres at mpFillOn = False ; Turn off map fill
res at cnLevelSelectionMode = "ExplicitLevels" ; set explicit contour levels
COlevels =
(/10,25,50,75,100,200,400,600,800,1000,1500,2000,3000,4000,5000/) ; set
levels for CO
NOlevels = (/5,10,15,20,25,30,40,50,75,100,125,150,175,200,250/) ; set
levels for NO
VOClevels = (/5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80/) ; set
levels for NMVOCs
SO2levels = (/5,10,15,20,25,50,75,100,150,200,250,300/) ; set levels for
SO2
NH3levels = (/5,10,15,20,25,30,35,40,45,50,60,70,80,90,100/) ; set levels
for NH3
PMlevels = (/10,25,50,100,150,200,250,500,1000,1500,2000,2500,3000/) ;
set levels for Total Aerosol
res at lbLabelBarOn = False ; turn off labelbar, but still
customize
res at lbOrientation = "Vertical" ; it so we can recreate it later
res at lbTitleAngleF = 90. ; title angle
res at lbTitlePosition = "Right" ; title location
res at lbTitleDirection = "Across" ; letter angle
res at lbLabelFontHeightF = 0.025
res at pmLabelBarOrthogonalPosF = -1.05
res at pmLabelBarParallelPosF = 1.2
;---Resources for 1st row of plots
res1 = res
res1 at cnLevels = NOlevels
res1 at lbTitleString = "NO"
;---Resources for 2nd row of plots
res2 = res
res2 at cnLevels = COlevels
res2 at lbTitleString = "CO"
;---Resources for 3rd row of plots
res3 = res
res3 at cnLevels = VOClevels
res3 at lbTitleString = "NMVOC"
;---Contour resources for each set of contour plots
res11 = res1
res12 = res1
res13 = res1
res14 = res1
res21 = res2
res22 = res2
res23 = res2
res24 = res2
res31 = res3
res32 = res3
res33 = res3
res34 = res3
;---Rightmost plots
res14 at lbLabelBarOn = True
res24 at lbLabelBarOn = True
res34 at lbLabelBarOn = True
contour_NO_ind = wrf_contour(c2,wks,NO_ind,res11)
contour_NO_pow = wrf_contour(c2,wks,NO_pow,res12)
contour_NO_tran = wrf_contour(c2,wks,NO_tran,res13)
contour_NO_res = wrf_contour(c2,wks,NO_res,res14)
contour_CO_ind = wrf_contour(c2,wks,CO_ind,res21)
contour_CO_pow = wrf_contour(c2,wks,CO_pow,res22)
contour_CO_tran = wrf_contour(c2,wks,CO_tran,res23)
contour_CO_res = wrf_contour(c2,wks,CO_res,res24)
contour_VOC_ind = wrf_contour(c2,wks,VOC_ind,res31)
contour_VOC_pow = wrf_contour(c2,wks,VOC_pow,res32)
contour_VOC_tran = wrf_contour(c2,wks,VOC_tran,res33)
contour_VOC_res = wrf_contour(c2,wks,VOC_res,res34)
mpres at mpOutlineBoundarySets = "AllBoundaries" ; turn on country
boundaries
mpres at mpGeophysicalLineColor = "Black" ; color of cont.
outlines
mpres at mpNationalLineColor = "Black" ; color of cont.
outlines
mpres at mpProvincialLineColor = "Black" ; color of cont. outlines
mpres at mpGeophysicalLineThicknessF = 1.5 ; thickness of outlines
mpres at mpNationalLineThicknessF = 1.5 ; thickness of outlines
mpres at mpProvincialLineThicknessF = 1.5 ; thickness of outlines
mpres at mpDataBaseVersion = "MediumRes" ; choose higher
resolution
mpres at mpDataSetName = "Earth..4" ; choose most recent
boundaries
; MAKE PLOTS
;pltres at FramePlot = False ; do not frame plot - will do this manually later
mpres at tmXTOn = True
mpres at tmYROn = True
mpres at tmXBMajorOutwardLengthF = 0.0 ; draw tickmarks inward
mpres at tmXBMinorOutwardLengthF = 0.0 ; draw minor ticks
inward
mpres at tmYLMajorOutwardLengthF = 0.0 ; draw tickmarks inward
mpres at tmYLMinorOutwardLengthF = 0.0 ; draw minor ticks
inward
mpres at tmXTMajorOutwardLengthF = 0.0 ; draw tickmarks inward
mpres at tmXTMinorOutwardLengthF = 0.0 ; draw minor ticks
inward
mpres at tmYRMajorOutwardLengthF = 0.0 ; draw tickmarks inward
mpres at tmYRMinorOutwardLengthF = 0.0 ; draw minor ticks
inward
mpres at tmXBLabelFontHeightF = 0.017
plot1 = wrf_map_overlays(c2,wks,(/contour_NO_ind/),pltres,mpres)
plot2 = wrf_map_overlays(c2,wks,(/contour_NO_pow/),pltres,mpres)
plot3 = wrf_map_overlays(c2,wks,(/contour_NO_tran/),pltres,mpres)
plot4 = wrf_map_overlays(c2,wks,(/contour_NO_res/),pltres,mpres)
plot5 = wrf_map_overlays(c2,wks,(/contour_CO_ind/),pltres,mpres)
plot6 = wrf_map_overlays(c2,wks,(/contour_CO_pow/),pltres,mpres)
plot7 = wrf_map_overlays(c2,wks,(/contour_CO_tran/),pltres,mpres)
plot8 = wrf_map_overlays(c2,wks,(/contour_CO_res/),pltres,mpres)
plot9 = wrf_map_overlays(c2,wks,(/contour_VOC_ind/),pltres,mpres)
plot10 = wrf_map_overlays(c2,wks,(/contour_VOC_pow/),pltres,mpres)
plot11 = wrf_map_overlays(c2,wks,(/contour_VOC_tran/),pltres,mpres)
plot12 = wrf_map_overlays(c2,wks,(/contour_VOC_res/),pltres,mpres)
;---Retrieve the height used for the first plot and apply to subsequent
plots
getvalues plot1
"vpHeightF" : vph
end getvalues
setvalues
(/plot1,plot2,plot3,plot4,plot5,plot6,plot7,plot8,plot9,plot10,plot11,plot12/)
"vpHeightF" : vph
end setvalues
pltres at PanelPlot = True
; Panel the WRF plots.
pnlres = True
pnlres at gsnPanelYWhiteSpacePercent = 5 ; Add white space b/w plots.
pnlres at gsnMaximize = True
gsn_panel(wks,(/plot1,plot2,plot3,plot4,plot5,plot6,plot7,plot8,plot9,plot10,plot11,plot12/),(/3,4/),pnlres)
frame(wks)
I'll be extremely grateful if you could please point me to the right
direction on how to make all plots of the same height without leaving too
much white space in between them.
Cheers,
Tabish
*----------------------------------------------------------Dr Tabish U
Ansari <https://www.rug.nl/staff/t.u.ansari/>*
*Assistant Professor - Earth & Energy*
*University of Groningen - Campus Fryslân <https://www.rug.nl/cf/?lang=en>*
*Leeuwarden, the Netherlands*
*ResearchGate <https://www.researchgate.net/profile/Tabish_Ansari> | Google
Scholar
<https://scholar.google.com/citations?user=E94r-mwAAAAJ&hl=en&oi=ao> |
Twitter <https://twitter.com/tabishbiet> *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210208/76182e33/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NOCOVOC_D02_sectoralemissions-panel.pdf
Type: application/pdf
Size: 1964973 bytes
Desc: not available
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210208/76182e33/attachment-0001.pdf>
More information about the ncl-talk
mailing list