changing aspect ratio of the XY plot

From: Ufuk Utku Turuncoglu (BE) <u.utku.turuncoglu_at_nyahnyahspammersnyahnyah>
Date: Mon Jan 30 2012 - 07:00:56 MST

Hi,

I try to change aspect ratio of the XY plot and i am using vpHeightF and
vpWidthF resources. After a certain ratio of the vpHeightF and vpWidthF,
the NCL modifies those value and the result plot is not in the same
aspect ratio that is defined using those resources. Is there any way to
force the NCL to use the defined aspect ratio. I found that there is a
spacial resource (mpShapeMode) for map plots. Is it exist also for XY plots?

Best regards,

--ufuk

--- NCL CODE ---
;-----------------------------------------------------------
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/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
load "plot_func.ncl"
;-----------------------------------------------------------
begin
   ;--- parameters ---
   debug = False

   ;--- define basin ---
   id = 0

   ;--- definitions ---
   ;--- basins ---
   bids = (/ 1, 2, 3, 4, 5, 6, 0 /)
   bdsc = (/ "CAS", \
             "Volga", \
             "Ural", \
             "Kura", \
             "CAS+Volga+Ural+Kura", \
             "Volga+Ural+Kura", \
             "CAS20" /)
   nbasin = dimsizes(bids)

   ;--- open files ---
   dres = "20km"

   nc_trip1 = addfile("dsets/trip/"+dres+"/trip_rcm_nn.nc", "r")
   nc_obs1 = addfile("dsets/srb/"+dres+"/srbLW_1989-2007_rcm_mon.nc", "r")
   nc_obs2 =
addfile("dsets/srb/"+dres+"/srbSW_local_1989-2007_rcm_mon.nc", "r")
   nc_data1n = addfile("dsets/runs/74/flw_1989-2007_mon.nc", "r")
   ;nc_data1d = addfile("dsets/runs/74/fld_1989-2007_mon.nc", "r")
   nc_data2n = addfile("dsets/runs/74/fsw_1989-2007_mon.nc", "r")
   ;nc_data2d = addfile("dsets/runs/74/sina_1989-2007_mon.nc", "r")

   ;--- read variables ---
   rb1 = nc_trip1->rbasin

   varo1d = nc_obs1->lw_sfc_dn
   varo1n = nc_obs1->lw_sfc_net
   varo1u = varo1d-varo1n

   varo2u = nc_obs2->sw_sfc_up
   varo2d = nc_obs2->sw_sfc_dn
   varo2n = varo2d-varo2u

   varm1n = nc_data1n->flw
   ;varm1d = nc_data1d->fld
   ;varm1u = varm1d-varm1n

   varm2n = nc_data2n->fsw
   ;varm2d = nc_data2d->sina
   ;varm2u = varm2d-varm2n

   ;--- read mask and coordinates ---
   lat2d = nc_data1n->xlat
   lon2d = nc_data1n->xlon
   lsmask = nc_data1n->mask
   dims = dimsizes(lat2d)
   jm = dims(0)
   im = dims(1)

   ;--- mask data based on basin and RCM land sea mask ---
   dmask = new((/ jm, im /), "integer")
   dmask = 0

   ;--- sub region ---
   xbox = (/ 46.0, 56.0, 56.0, 46.0, 46.0 /)
   ybox = (/ 35.5, 35.5, 48.0, 48.0, 35.5 /)

   do i = 0, im-1
     do j = 0, jm-1
       if (gc_inout(lat2d(j,i), lon2d(j,i), ybox, xbox) .and. \
           lsmask(j,i) .eq. 0.0) then
         dmask(j,i) = 1
       end if
     end do
   end do

   ;--- create basin data ---
   data = tointeger(lsmask)*0
   data = where(dmask .eq. 1, 1, \
          where(rb1 .eq. 13, 2, \
          where(rb1 .eq. 78, 3, \
          where(rb1 .eq. 93, 4, 99))))
   data = mask(data, data .eq. 99, False)
   data@lat2d = lat2d
   data@lon2d = lon2d

   ;--- create temporary arrays ---
   ntime = dimsizes(varo1n(:,0,0))
   y1ou = new((/ nbasin, ntime /), typeof(varo1n))
   y1od = new((/ nbasin, ntime /), typeof(varo1n))
   y1on = new((/ nbasin, ntime /), typeof(varo1n))

   y2ou = new((/ nbasin, ntime /), typeof(varo2n))
   y2od = new((/ nbasin, ntime /), typeof(varo2n))
   y2on = new((/ nbasin, ntime /), typeof(varo2n))

   y1mu = new((/ nbasin, ntime /), typeof(varm1n))
   y1md = new((/ nbasin, ntime /), typeof(varm1n))
   y1mn = new((/ nbasin, ntime /), typeof(varm1n))

   y2mu = new((/ nbasin, ntime /), typeof(varm2n))
   y2md = new((/ nbasin, ntime /), typeof(varm2n))
   y2mn = new((/ nbasin, ntime /), typeof(varm2n))

   ;--- calculate average over basin ---
   do i = 0, dimsizes(bids)-1
     
print("******************************************************************")
     print(""+bdsc(i)+" "+i)
     
print("******************************************************************")

     ;--- init variables ---
     varo1u_masked = varo1u
     varo1d_masked = varo1d
     varo1n_masked = varo1n

     varo2u_masked = varo2u
     varo2d_masked = varo2d
     varo2n_masked = varo2n

     ;varm1u_masked = varm1u
     ;varm1d_masked = varm1d
     varm1n_masked = varm1n

     ;varm2u_masked = varm2u
     ;varm2d_masked = varm2d
     varm2n_masked = varm2n

     ;--- mask data based on selected region ---
     if ((bids(i) .gt. 0) .and. (bids(i) .lt. 5)) then
       varo1u_masked = mask(varo1u, data .eq. bids(i), True)
       varo1d_masked = mask(varo1d, data .eq. bids(i), True)
       varo1n_masked = mask(varo1n, data .eq. bids(i), True)
       varo2u_masked = mask(varo2u, data .eq. bids(i), True)
       varo2d_masked = mask(varo2d, data .eq. bids(i), True)
       varo2n_masked = mask(varo2n, data .eq. bids(i), True)
       ;varm1u_masked = mask(varm1u, data .eq. bids(i), True)
       ;varm1d_masked = mask(varm1d, data .eq. bids(i), True)
       varm1n_masked = mask(varm1n, data .eq. bids(i), True)
       ;varm2u_masked = mask(varm2u, data .eq. bids(i), True)
       ;varm2d_masked = mask(varm2d, data .eq. bids(i), True)
       varm2n_masked = mask(varm2n, data .eq. bids(i), True)
     end if
     if (bids(i) .eq. 5) then
       varo1u_masked = mask(varo1u, ismissing(data), False)
       varo1d_masked = mask(varo1d, ismissing(data), False)
       varo1n_masked = mask(varo1n, ismissing(data), False)
       varo2u_masked = mask(varo2u, ismissing(data), False)
       varo2d_masked = mask(varo2d, ismissing(data), False)
       varo2n_masked = mask(varo2n, ismissing(data), False)
       ;varm1u_masked = mask(varm1u, ismissing(data), False)
       ;varm1d_masked = mask(varm1d, ismissing(data), False)
       varm1n_masked = mask(varm1n, ismissing(data), False)
       ;varm2u_masked = mask(varm2u, ismissing(data), False)
       ;varm2d_masked = mask(varm2d, ismissing(data), False)
       varm2n_masked = mask(varm2n, ismissing(data), False)
     end if
     if (bids(i) .eq. 6) then
       varo1u_masked = mask(varo1u, data .eq. 1, False)
       varo1d_masked = mask(varo1d, data .eq. 1, False)
       varo1n_masked = mask(varo1n, data .eq. 1, False)
       varo2u_masked = mask(varo2u, data .eq. 1, False)
       varo2d_masked = mask(varo2d, data .eq. 1, False)
       varo2n_masked = mask(varo2n, data .eq. 1, False)
       ;varm1u_masked = mask(varm1u, data .eq. 1, False)
       ;varm1d_masked = mask(varm1d, data .eq. 1, False)
       varm1n_masked = mask(varm1n, data .eq. 1, False)
       ;varm2u_masked = mask(varm2u, data .eq. 1, False)
       ;varm2d_masked = mask(varm2d, data .eq. 1, False)
       varm2n_masked = mask(varm2n, data .eq. 1, False)
     end if

     if (debug) then
       ;--- plot data ---
       wks = gsn_open_wks("pdf","plot_rad3_"+i)
       gsn_define_colormap(wks, "gui_default")

       ;--- define map resource ---
       res = True
       res@gsnAddCyclic = False
       res@gsnLeftString = ""
       res@gsnRightString = ""
       res@cnFillOn = True
       res@cnFillMode = "CellFill"
       res@cnInfoLabelOn = False
       res@cnLinesOn = False
       res@cnLineLabelsOn = False
       res@lbLabelBarOn = True
       res@lbLabelFontHeightF = 0.01
       res@pmLabelBarWidthF = 0.06
       res@pmTickMarkDisplayMode = "Always"
       res@tiXAxisFontHeightF = 0.01
       res@tiYAxisFontHeightF = 0.01
       res@tmXBLabelFontHeightF = 0.01
       res@tmYLLabelFontHeightF = 0.01
       res@tiXAxisString = "Longitude"
       res@tiYAxisString = "Latitude"

       ;--- map definitions ---
       res@mpDataBaseVersion = "HighRes"
       res@mpProjection = "LambertConformal"
       res@mpOutlineDrawOrder = "PostDraw"
       res@mpGridAndLimbOn = False
       res@mpLambertParallel1F = 30
       res@mpLambertParallel2F = 60

       res@mpLimitMode = "Corners"
       res@mpLeftCornerLatF = 35.0
       res@mpLeftCornerLonF = 37.0
       res@mpRightCornerLatF = 64.0
       res@mpRightCornerLonF = 67.0
       res@mpLambertMeridianF = 51.0

       varm1_masked@lon2d = lon2d
       varm1_masked@lat2d = lat2d
       plot = gsn_csm_contour_map(wks, varm1_masked(0,:,:), res)

       delete(wks)
       delete(plot)
     end if

     ;--- calculate basin averages ---
     y1ou(i,:) = dim_avg_n(varo1u_masked, (/1,2/))
     y1od(i,:) = dim_avg_n(varo1d_masked, (/1,2/))
     y1on(i,:) = dim_avg_n(varo1n_masked, (/1,2/))
     y2ou(i,:) = dim_avg_n(varo2u_masked, (/1,2/))
     y2od(i,:) = dim_avg_n(varo2d_masked, (/1,2/))
     y2on(i,:) = dim_avg_n(varo2n_masked, (/1,2/))
     ;y1mu(i,:) = dim_avg_n(varm1u_masked, (/1,2/))
     ;y1md(i,:) = dim_avg_n(varm1d_masked, (/1,2/))
     y1mn(i,:) = dim_avg_n(varm1n_masked, (/1,2/))
     ;y2mu(i,:) = dim_avg_n(varm2u_masked, (/1,2/))
     ;y2md(i,:) = dim_avg_n(varm2d_masked, (/1,2/))
     y2mn(i,:) = dim_avg_n(varm2n_masked, (/1,2/))
   end do

   xf = cd_calendar(nc_obs1->time, 4)

   ;--- plot data ---
   wks = gsn_open_wks("newpdf", "plot_rad3")
   gsn_define_colormap(wks, "uniform")

   ;--- resource for text ---
   res_text = True
   res_text@txFontHeightF = 0.010
   res_text@txJust = "CenterRight"

   ;--- resource for plot ---
   res1 = True
   res1@gsnDraw = False
   res1@gsnFrame = False
   res1@trXMinF = 1988.5
   res1@trXMaxF = 2008.5
   res1@mpShapeMode = "FreeAspect"
   res1@vpHeightF = 0.25 ;0.1
   res1@vpWidthF = 0.55 ;0.70

   colors = (/ "red", "blue" /)
   res1@xyLineColors = colors
   res1@xyLineThicknesses = (/ 1.5, 1.5 /)
   res1@xyDashPatterns = (/ 0.0, 0.0 /)

   res1@tmXBMode = "Explicit"
   res1@tmXBValues = fspan(1989,2008,20)
   res1@tmXBLabels = fspan(1989,2008,20)
   res1@tmXBLabelAngleF = 90.0
   res1@tmXBLabelJust = "CenterRight"

   res2 = res1

   ;--- plot longwave ---
   res1@gsnLeftString = "Basin: "+bdsc(id)
   res1@gsnLeftStringFontHeightF = 0.010
   res1@tiXAxisOn = False
   res1@tmXBLabelsOn = False
   res1@tmYLLabelFontHeightF = 0.01

   plot1 = gsn_csm_xy(wks, xf, (/ y1on(id,:), -1.0*y1mn(id,:) /), res1)
   dum1 = gsn_add_text(wks, plot1, "Longwave Radiation (W/m~S~2~N~)",
max(xf)+0.5, -45, res_text)

   ;--- plot shortwave ---
   res2@gsnLeftString = ""
   res2@tmXBLabelsOn = True
   res2@tiXAxisOn = True
   res2@tiXAxisString = "Time (year)"
   res2@tiXAxisFontHeightF = 0.012
   res2@tmYLLabelsOn = False
   res2@tmYRLabelsOn = True
   res2@tiYAxisSide = "Right"
   res2@tmYRLabelFontHeightF = 0.01
   res2@tmXBLabelFontHeightF = 0.01

   plot2 = gsn_csm_xy(wks, xf, (/ y2on(id,:), y2mn(id,:) /), res2)
   dum2 = gsn_add_text(wks, plot2, "Shortwave Radiation (W/m~S~2~N~)",
max(xf)+0.5, 300, res_text)

   ;--- attach plots ---
   res_attach1 = True
   res_attach1@gsnAttachPlotsXAxis = True
   res_attach2 = True
   res_attach2@gsnAttachPlotsXAxis = True
   plot3 = gsn_attach_plots(plot1, (/plot2/), res_attach1, res_attach2)

   drawNDCGrid(wks)
   draw(plot1)
   draw_vp_box(wks,plot1)

   frame(wks)
   ;pres = False
   ;maximize_output(wks, pres)
end

----
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Mon Jan 30 19:01:10 2012

This archive was generated by hypermail 2.1.8 : Thu Feb 02 2012 - 03:10:31 MST