[ncl-talk] XY plot with multiple vertical axes

Giorgio Graffino g.graffino at tim.it
Wed Jul 14 05:21:28 MDT 2021


Thanks Adam,

I'm sorry I couldn't provide a clean MWE, but there is a lot of things 
(probably too many) going on in my script. I'm trying to customize the 
vp resources, but I feel that I have no control on those. No matter how 
I set vpXF and vpYF, the plot doesn't move up/down nor left/right. There 
is maybe something working under the hood I can't prevent. At this 
point, it's even pointless to use getvalues. Probably it's better to use 
gsn_panel like in 
https://www.ncl.ucar.edu/Applications/Scripts/panel_24.ncl.

Cheers,
Giorgio


    ------ Messaggio Originale ------
    Da: asphilli at ucar.edu
    A: g.graffino at tim.it
Cc: ncl-talk at ucar.edu
    Inviato: Friday, July 9, 2021 7:08 PM
    Oggetto: Re: [ncl-talk] XY plot with multiple vertical axes


Hi Giorgio,
You have a lot going on in the code snippet you sent, with numerous 
calls to gsn_attach_plots and overlay. Yes, it is possible to do what 
you want, but as you can tell already there is a bit of art to this. I 
would recommend not setting gsnMaximize for anything (which you are 
not), and pay particular attention to the vpYF/vpHeightF settings for 
your various resource lists. The values should be identical across your 
resa, resb and rez resource lists, otherwise the sizes and locations of 
the plots will be different.  I'd try setting vpYF = 0.8 and vpHeightF = 
0.6 to start. Finally, I would not call drawNDCGrids until right before 
the frame(wks) call as it freezes the size of the frame. That shouldn't 
affect anything with your script as you are not maximizing, but just to 
be sure I would move the call.


Hope the above helps!
Adam





On Wed, Jul 7, 2021 at 5:33 AM Giorgio Graffino via ncl-talk 
<ncl-talk at mailman.ucar.edu <mailto:ncl-talk at mailman.ucar.edu> > wrote:

Dear NCL folks,

I'm trying to draw a XY plot by attaching four subplots together and 
giving each of them its own vertical axis. This last point is 
particularly tricky. Taking inspiration from this example 
(https://www.ncl.ucar.edu/Applications/Scripts/xy_22.ncl 
<https://www.ncl.ucar.edu/Applications/Scripts/xy_22.ncl> ), I'm trying 
now to draw individual vertical axis using gsn_blank_plot, but I can't 
make all the plots to arrange nicely (see 
HadCM3_plot_temp_ohue.000003.png) even when I explicitly set the NDC 
coordinates of the main plot (see code snippet below).

What I'd like to have is something like 
HadCM3_plot_temp_ohue.000004.png, but with individual axes for each 
subplot. Can it be done? Is there an easier way to get a nice result?

Cheers,
Giorgio

deltapl = fspan(0.2,0.8,5)
; resa at gsnMaximize       = True
  resa at gsnDraw           = False   ; Don't draw plot
  resa at gsnFrame          = False   ; Don't advance frame
  resa at gsnYRefLine       = 0.
  resa at tiMainString      = ""
  resa at tiMainFontHeightF = 0.015
  resa at tiXAxisString     = ""
  resa at tiYAxisString     = ""
  resa at tiYAxisFontHeightF = 0.0125
  resa at tmXBMode          = "Explicit"
  resa at tmXBLabelAngleF   = 45.
  resa at tmXBLabelFontHeightF = 0.0125
  resa at tmXBLabelJust     = "TopRight"
  resa at tmXBLabels        := (/"Pos","Neg"/)
  resa at tmXBValues        := (/0.8,1.2/)
  resa at tmXUseBottom      = False
  resa at tmXTLabelsOn      = True
  resa at tmXTMode          = "Explicit"
  resa at tmXTLabelAngleF   = 45.
  resa at tmXTLabelFontHeightF = 0.0125
  resa at tmXTLabelJust     = "BottomLeft"
  resa at tmXTLabels        = labels1(0)
  resa at tmXTValues        = 1.
  resa at tmYLLabelFontHeightF = 0.0125
  resa at trXMinF           = 0.5
  resa at trXMaxF           = 1.5
  resa at trYMinF           = 0.
  resa at trYMaxF           = 0.5
  resa at vpHeightF         = 0.8
  resa at vpWidthF          = 0.15
  resa at vpXF              = 0.2
  resa at vpYF              = 0.8
  resa at xyMarkLineMode    = "Markers"                ; choose to use 
markers
  resa at xyMarkers         := markrs
  resa at xyMarkerColors    := (/"Black","Red","Pink","Grey"/)
  resa at xyMarkerSizeF     = 0.015                    ; Marker size 
(default 0.01)
  resa at xyMarkerThicknessF = 3.
; resb at gsnMaximize       = True
  resb at gsnDraw           = False   ; Don't draw plot
  resb at gsnFrame          = False   ; Don't advance frame
  resb at tiMainFontHeightF = 0.015
  resb at trXMinF           = 0.5
  resb at trXMaxF           = 1.5
  resb at trYMinF           = 0.
  resb at trYMaxF           = 0.5
  resb at xyMarkLineMode    = "Markers"                ; choose to use 
markers
  resb at xyMarkers         := markrs
  resb at xyMarkerColors    := (/"Purple","Blue","Cyan","Green"/)
  resb at xyMarkerSizeF     = 0.015                    ; Marker size 
(default 0.01)
  resb at xyMarkerThicknessF = 3.
  resb at vpHeightF         = 0.8
  resb at vpWidthF          = 0.15
  resb at vpXF              = 0.2
  resb at vpYF              = 0.8
  resz at gsnDraw      = False
  resz at gsnFrame     = False
  resz at tmXBOn       = False      ; Turn off X axis since it has already
  resz at tmXBBorderOn = False      ; been drawn.
  resz at tmXBLabelsOn = False
  resz at tmXTOn       = False
  resz at tmXTBorderOn = False
  resz at tmXTLabelsOn = False
  resz at tmYLOn       = True       ; Turn on left Y axis.
  resz at tmYLBorderOn = True
  resz at tmYLLabelsOn = True
  resz at tmYLLabelFontHeightF = 0.0125
  resz at tmYROn       = False
  resz at tmYRBorderOn = False
  resz at tmYRLabelsOn = False
  resz at vpHeightF    = 0.75
  resz at vpYF         = 0.85


  plot1a = 
gsn_csm_xy(wks,transpose((/(/0.8,0.8,0.8,0.8/),(/0.8,0.8,0.8,0.8/)/)),transpose((/abs(tas_globalave_positiveforcing(0:6:2)),abs(tas_globalave_positiveforcing(0:6:2))/)),resa)
  plot1b = 
gsn_csm_xy(wks,transpose((/(/1.2,1.2,1.2,1.2/),(/1.2,1.2,1.2,1.2/)/)),transpose((/abs(tas_globalave_negativeforcing(0:6:2)),abs(tas_globalave_negativeforcing(0:6:2))/)),resb)
; resa at tiMainString      = "HadCM3 -"
  resa at tmXTLabels        = labels1(1)
  resa at trYMinF           = 0.
  resa at trYMaxF           = 1.5
  resb at trYMinF           = 0.
  resb at trYMaxF           = 1.5
  resz at trYMinF           = 0.
  resz at trYMaxF           = 1.5
  resz at vpXF              = deltapl(1)
  plot2a = 
gsn_csm_xy(wks,transpose((/(/0.8,0.8,0.8,0.8/),(/0.8,0.8,0.8,0.8/)/)),transpose((/abs(sst_globalave_positiveforcing(0:6:2)),abs(sst_globalave_positiveforcing(0:6:2))/)),resa)
  plot2b = 
gsn_csm_xy(wks,transpose((/(/1.2,1.2,1.2,1.2/),(/1.2,1.2,1.2,1.2/)/)),transpose((/abs(sst_globalave_negativeforcing(0:6:2)),abs(sst_globalave_negativeforcing(0:6:2))/)),resb)
  plot2z = gsn_blank_plot(wks,resz)
; resa at tiMainString      = "Seasonal Cycle"
  resa at tmXTLabels        = labels1(2)
  resa at trYMinF           = 0.
  resa at trYMaxF           = 1.5
  resb at trYMinF           = 0.
  resb at trYMaxF           = 1.5
  resz at trYMinF           = 0.
  resz at trYMaxF           = 1.5
  resz at vpXF              = deltapl(2)
  plot3a = 
gsn_csm_xy(wks,transpose((/(/0.8,0.8,0.8,0.8/),(/0.8,0.8,0.8,0.8/)/)),transpose((/abs(trac_globalave_positiveforcing(0:6:2)),abs(trac_globalave_positiveforcing(0:6:2))/)),resa)
  plot3b = 
gsn_csm_xy(wks,transpose((/(/1.2,1.2,1.2,1.2/),(/1.2,1.2,1.2,1.2/)/)),transpose((/abs(trac_globalave_negativeforcing(0:6:2)),abs(trac_globalave_negativeforcing(0:6:2))/)),resb)
  plot3z = gsn_blank_plot(wks,resz)
; resa at tiMainString      = ""
  resa at tmXTLabels        = labels1(3)
  resa at trYMinF           = 0.
  resa at trYMaxF           = 35.
  resb at trYMinF           = 0.
  resb at trYMaxF           = 35.
  resz at trYMinF           = 0.
  resz at trYMaxF           = 35.
  resz at vpXF              = deltapl(3)
  plot4a = 
gsn_csm_xy(wks,transpose((/(/0.8,0.8,0.8,0.8/),(/0.8,0.8,0.8,0.8/)/)),transpose((/abs(tas_ohue_positiveforcing(0:6:2)),abs(tas_ohue_positiveforcing(0:6:2))/)),resa)
  plot4b = 
gsn_csm_xy(wks,transpose((/(/1.2,1.2,1.2,1.2/),(/1.2,1.2,1.2,1.2/)/)),transpose((/abs(tas_ohue_negativeforcing(0:6:2)),abs(tas_ohue_negativeforcing(0:6:2))/)),resb)
  plot4z = gsn_blank_plot(wks,resz)
  overlay(plot1a,plot1b)
  overlay(plot2a,plot2b)
  overlay(plot3a,plot3b)
  overlay(plot4a,plot4b)
  drawNDCGrid(wks)
  attplot = 
gsn_attach_plots(plot1a,(/plot2a,plot3a,plot4a/),at_res,False)
  draw(plot1a)
  draw(plot2z)
  draw(plot3z)
  draw(plot4z)
do i = 0, dimsizes(ypos1)-1
  lb_res at lbFillColors     = colors(i)
  lb_res at lbLabelFontColor = colors(i)
  gsn_labelbar_ndc(wks,1,labels2(i),0.85,ypos1(i),lb_res)
end do
do i = 0, dimsizes(ypos2)-1
  mk_res at gsMarkerIndex    = markrs(i)
  gsn_polymarker_ndc(wks,0.875,ypos2(i),mk_res)
  gsn_text_ndc(wks,labels3(i),0.9,ypos2(i),tx_res)
end do
  frame(wks)_______________________________________________
  ncl-talk mailing list
  ncl-talk at mailman.ucar.edu <mailto:ncl-talk at mailman.ucar.edu>
  List instructions, subscriber options, unsubscribe:
  https://mailman.ucar.edu/mailman/listinfo/ncl-talk 
<https://mailman.ucar.edu/mailman/listinfo/ncl-talk>


-- 





Adam Phillips
Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR

www.cgd.ucar.edu/staff/asphilli/ 
<http://www.cgd.ucar.edu/staff/asphilli/>    303-497-1726


  <http://www.cgd.ucar.edu/staff/asphilli>









-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210714/ac788c03/attachment.html>


More information about the ncl-talk mailing list