forrest@0: function taylor_diagram (wks:graphic ,RATIO[*][*]:numeric, CC[*][*]:numeric \ forrest@0: ,rOpts:logical) forrest@0: ;-------------------------------------------------------------------- forrest@0: ; This version of taylor_diagram supports "paneling" forrest@0: ; It requires NCL version 4.2.0.a034 because it uses "gsn_create_legend" forrest@0: ;-------------------------------------------------------------------- forrest@0: forrest@0: ; forrest@0: ; Generate a Taylor Diagram: forrest@0: ; Generate Multiple Aspects of Model Performance in a Single Diagram forrest@0: ; Taylor, K. E., J. Geophys. Res., 106, D7, 7183-7192, 2001 forrest@0: ; forrest@0: ; An example: forrest@0: ; http://www.grida.no/climate/ipcc_tar/wg1/fig8-4.htm forrest@0: ; forrest@0: ; This expects one or more datasets. The left dimension forrest@0: ; is the number of datasets. The rightmost is the number of pts. forrest@0: ; forrest@0: ; Markers are at: forrest@0: ; http://www.ncl.ucar.edu/Document/Graphics/Resources/gs.shtml forrest@0: ; forrest@0: ; By default, the function can handle up to 10 variable comparisons.. forrest@0: ; To expand ... modify the 'Colors' and 'Markers' attributes. forrest@0: ; The user can change / add some default settings. forrest@0: ; forrest@0: ; The defaults that the user can modify: forrest@0: ; forrest@0: ; rOpts = True forrest@0: ; ; 'made-up' resources forrest@0: ; rOpts@Colors = (/ "blue" , "red", "green", "cyan", "black" \ forrest@0: ; , "torquoise", "brown", "yellow"/) forrest@0: ; rOpts@Markers = (/ 2, 3, 6, 14, 9, 12, 7, 4/) ; Marker Indices forrest@0: ; rOpts@markerTxOffset = 0.0175 ; offset for text above marker forrest@0: ; rOpts@stnRad = (/ 1. /) ; (/ 0.50, 0.75, 1.5 /) forrest@0: ; rOpts@centerDiffRMS = False ; True mean draw additional radii from REF forrest@0: ; rOpts@caseLabelsFontHeightF = 0.05 forrest@0: ; rOpts@varLabelsFontHeightF = 0.013 forrest@0: ; rOpts@varLabelsYloc = 0.65 forrest@0: ; rOpts@legendWidth = 0.015 forrest@0: ; rOpts@legendHeight = 0.030*nCase forrest@0: ; rOpts@taylorDraw = True forrest@0: ; rOpts@taylorFrame = True forrest@0: ; forrest@0: ; ; standard NCL resources forrest@0: ; rOpts@tiMainString = "Taylor" ; not using title makes plot bigger forrest@0: ; rOpts@gsMarkerSizeF = 0.0085 ; marker size forrest@0: ; rOpts@gsMarkerThicknessF = 1.0 forrest@0: ; rOpts@txFontHeightF = 0.0125 ; text size forrest@0: ; rOpts@tiMainFontHeightF = 0.0225 ; tiMainString size forrest@0: ; forrest@0: ; It returns to the user a graphic object containing the forrest@0: ; Taylor background and plotted x/y pts. forrest@0: ; This graphic object contains a simple Taylor background appropriate forrest@0: ; for standardized data and the markers for the datasets. forrest@0: ; ================================================================== forrest@0: ; This version allows paneling: forrest@0: ; The 'cumbersome' "dum" variables were added by forrest@0: ; Adam Phillips to allow paneling via "gsn_add_?". forrest@0: ; ================================================================== forrest@0: begin forrest@0: dimR = dimsizes(RATIO) forrest@0: nCase = dimR(0) ; # of cases [models] forrest@0: nVar = dimR(1) ; # of variables forrest@0: forrest@0: ; x/y coordinates for plotting forrest@0: X = new ( (/nCase,nVar/) , typeof(RATIO) ) forrest@0: Y = new ( (/nCase,nVar/) , typeof(RATIO) ) forrest@0: forrest@0: do nc=0,nCase-1 forrest@0: angle = acos( CC(nc,:) ) ; array operation forrest@0: X(nc,:) = RATIO(nc,:)*cos( angle ) forrest@0: Y(nc,:) = RATIO(nc,:)*sin( angle ) forrest@0: end do forrest@0: forrest@0: xyMin = 0. forrest@0: xyOne = 1.00 forrest@0: xyMax = 1.65 forrest@0: xyMax_Panel = xyMax+ 0.10 ; paneling purposes forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"txFontHeightF")) then forrest@0: FontHeightF = rOpts@txFontHeightF ; user wants to specify size forrest@0: else forrest@0: FontHeightF = 0.0175 forrest@0: end if forrest@0: forrest@0: ; ---------------------------------------------------------------- forrest@0: ; Part 1: forrest@0: ; base plot: Based upon request of Mark Stevens forrest@0: ; basic x-y and draw the 1.0 observed and the outer curve at 1.65 forrest@0: ; ---------------------------------------------------------------- forrest@0: forrest@0: rxy = True forrest@0: rxy@gsnDraw = False forrest@0: rxy@gsnFrame = False forrest@0: rxy@vpHeightF = 0.65 forrest@0: rxy@vpWidthF = 0.65 forrest@0: rxy@tmYLBorderOn = False forrest@0: rxy@tmXBBorderOn = False forrest@0: forrest@0: rxy@tiYAxisString = "Standardized Deviation (Normalized)" forrest@0: rxy@tiYAxisFontHeightF= FontHeightF ; default=0.025 forrest@0: forrest@0: rxy@tmXBMode = "Explicit" forrest@0: rxy@tmXBValues = (/0.0,0.25,0.50,0.75,1.00,1.25,1.5/) ; major tm forrest@0: ; default "OBS" or "REF" forrest@0: ;rxy@tmXBLabels = (/"0.00","0.25","0.50","0.75","REF" ,"1.25","1.50"/) forrest@0: rxy@tmXBLabels = (/" ","0.25","0.50","0.75","REF" ,"1.25","1.50"/) forrest@0: if (rOpts .and. isatt(rOpts,"OneX") ) then ; eg: rOpts@OneX="1.00" forrest@0: ;rxy@tmXBLabels = (/"0.00","0.25","0.50","0.75",rOpts@OneX,"1.25","1.50"/) forrest@0: rxy@tmXBLabels = (/" ","0.25","0.50","0.75",rOpts@OneX,"1.25","1.50"/) forrest@0: end if forrest@0: forrest@0: rxy@tmXBMajorLengthF = 0.015 ; default=0.02 for a vpHeightF=0.6 forrest@0: rxy@tmXBLabelFontHeightF = FontHeightF forrest@0: rxy@tmXBMinorOn = False forrest@0: rxy@trXMaxF = xyMax_Panel forrest@0: forrest@0: rxy@tmYLMode = "Manual" forrest@0: rxy@tmYLMinorOn = False forrest@0: rxy@tmYLMajorLengthF = rxy@tmXBMajorLengthF forrest@0: rxy@tmYLLabelFontHeightF = FontHeightF forrest@0: rxy@tmYLMode = "Explicit" forrest@0: rxy@tmYLValues = (/0.0, .25,0.50, 0.75, 1.00, 1.25, 1.5/) ; major tm forrest@0: rxy@tmYLLabels = (/"0.00","0.25","0.50","0.75","1.00","1.25","1.50"/) forrest@0: ;rxy@tmYLLabels = (/" ","0.25","0.50","0.75","1.00","1.25","1.50"/) forrest@0: rxy@trYMaxF = xyMax_Panel forrest@0: forrest@0: rxy@tmYRBorderOn = False forrest@0: rxy@tmYROn = False ; Turn off right tick marks. forrest@0: forrest@0: rxy@tmXTBorderOn = False forrest@0: rxy@tmXTOn = False ; Turn off right tick marks. forrest@0: forrest@0: rxy@xyDashPatterns = (/ 0 /) ; line characteristics (dash,solid) forrest@0: rxy@xyLineThicknesses = (/ 2./) ; choose line thickness forrest@0: forrest@0: rxy@gsnFrame = False ; Don't advance the frame. forrest@0: forrest@0: ; create outer 'correlation axis' forrest@0: npts = 200 ; arbitrary forrest@0: xx = fspan(xyMin,xyMax,npts) forrest@0: yy = sqrt(xyMax^2 - xx^2 ) ; outer correlation line (xyMax) forrest@0: forrest@0: sLabels = (/"0.0","0.1","0.2","0.3","0.4","0.5","0.6" \ ; correlation labels forrest@0: ,"0.7","0.8","0.9","0.95","0.99","1.0" /); also, major tm forrest@0: cLabels = stringtofloat(sLabels) forrest@0: rad = 4.*atan(1.0)/180. forrest@0: angC = acos(cLabels)/rad ; angles: correlation labels forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"tiMainString")) then forrest@0: rxy@tiMainString = rOpts@tiMainString forrest@0: ;rxy@tiMainOffsetYF = 0.015 ; default 0.0 forrest@0: if (isatt(rOpts,"tiMainFontHeightF")) then forrest@0: rxy@tiMainFontHeightF = rOpts@tiMainFontHeightF forrest@0: else forrest@0: rxy@tiMainFontHeightF = 0.0225 ; default 0.025 forrest@0: end if forrest@0: end if forrest@0: ;;if (rOpts .and. isatt(rOpts,"gsnCenterString")) then forrest@0: ;; rxy@gsnCenterString = rOpts@gsnCenterString ; only gsn_csm_xy forrest@0: ;;end if forrest@0: forrest@0: taylor = gsn_xy(wks,xx,yy,rxy) ; Create and draw XY plot. forrest@0: forrest@0: rsrRes = True forrest@0: rsrRes@gsLineThicknessF = rxy@xyLineThicknesses(0) ; line thickness forrest@0: rsrRes@gsLineDashPattern = 0 ; solid line pattern forrest@0: ; draw x and y to xyMax forrest@0: dum0 = gsn_add_polyline(wks,taylor,(/0., 0. /),(/0.,xyMax/), rsrRes) forrest@0: dum1 = gsn_add_polyline(wks,taylor,(/0.,xyMax/),(/0., 0. /), rsrRes) forrest@0: forrest@0: xx = fspan(xyMin, xyOne ,npts) ; draw 1.0 standard radius forrest@0: yy = sqrt(xyOne - xx^2) forrest@0: rsrRes@gsLineDashPattern = 1 ; dashed line pattern forrest@0: rsrRes@gsLineThicknessF = rxy@xyLineThicknesses(0) ; line thickness forrest@0: dum2 = gsn_add_polyline(wks,taylor,xx,yy, rsrRes) forrest@0: delete(xx) forrest@0: delete(yy) forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"stnRad") ) then forrest@0: rsrRes@gsLineThicknessF = 1 ; rxy@xyLineThicknesses(0) forrest@0: nStnRad = dimsizes(rOpts@stnRad) forrest@0: forrest@0: dum3 = new(nStnRad,graphic) forrest@0: do n=0,nStnRad-1 forrest@0: rr = rOpts@stnRad(n) forrest@0: xx = fspan(xyMin, rr ,npts) forrest@0: yy = sqrt(rr^2 - xx^2) forrest@0: dum3(n) = gsn_add_polyline(wks,taylor,xx,yy, rsrRes) forrest@0: end do forrest@0: taylor@$unique_string("dum")$ = dum3 forrest@0: forrest@0: delete(xx) forrest@0: delete(yy) forrest@0: end if forrest@0: forrest@0: getvalues taylor ; get style info from taylor forrest@0: "tmYLLabelFont" : tmYLLabelFont ; use for correlation axis forrest@0: "tmYLLabelFontHeightF" : tmYLLabelFontHeightF forrest@0: end getvalues forrest@0: forrest@0: ; ---------------------------------------------------------------- forrest@0: ; Part 2: forrest@0: ; Correlation labels forrest@0: ; ---------------------------------------------------------------- forrest@0: radC = xyMax ; for correlation labels forrest@0: xC = radC*cos(angC*rad) forrest@0: yC = radC*sin(angC*rad) forrest@0: ; added to get some separation forrest@0: xC = xC + 0.020*cos(rad*angC) forrest@0: yC = yC + 0.060*sin(rad*angC) forrest@0: forrest@0: txRes = True ; text mods desired forrest@0: txRes@txFontHeightF = FontHeightF ; match YL forrest@0: txRes@tmYLLabelFont = tmYLLabelFont ; match YL forrest@0: txRes@txAngleF = -45. forrest@0: if (.not.isatt(rOpts,"drawCorLabel") .or. rOpts@drawCorLabel) then forrest@0: dum4 = gsn_add_text(wks,taylor,"Correlation",1.30,1.30,txRes) forrest@0: taylor@$unique_string("dum")$ = dum4 forrest@0: end if forrest@0: txRes@txAngleF = 0.0 forrest@0: txRes@txFontHeightF = FontHeightF*0.50 ; bit smaller forrest@0: forrest@0: ;;dum0 = gsn_add_text(wks,taylor,"OBSERVED",1.00,0.075,txRes) forrest@0: forrest@0: plRes = True forrest@0: plRes@gsLineThicknessF = 2. forrest@0: forrest@0: txRes@txJust = "CenterLeft" ; Default="CenterCenter". forrest@0: txRes@txFontHeightF = FontHeightF ; match YL forrest@0: ;txRes@txBackgroundFillColor = "white" forrest@0: forrest@0: tmEnd = 0.975 forrest@0: radTM = xyMax*tmEnd ; radius end: major TM forrest@0: xTM = new( 2 , "float") forrest@0: yTM = new( 2 , "float") forrest@0: forrest@0: dum5 = new(dimsizes(sLabels),graphic) forrest@0: dum6 = dum5 forrest@0: forrest@0: do i=0,dimsizes(sLabels)-1 ; Loop to draw strings forrest@0: txRes@txAngleF = angC(i) forrest@0: dum5(i) = gsn_add_text(wks, taylor, sLabels(i),xC(i),yC(i),txRes) ; cor label forrest@0: xTM(0) = xyMax*cos(angC(i)*rad) ; major tickmarks at forrest@0: yTM(0) = xyMax*sin(angC(i)*rad) ; correlation labels forrest@0: xTM(1) = radTM*cos(angC(i)*rad) forrest@0: yTM(1) = radTM*sin(angC(i)*rad) forrest@0: dum6(i) = gsn_add_polyline(wks,taylor,xTM,yTM,plRes) forrest@0: end do forrest@0: ; minor tm locations forrest@0: mTM = (/0.05,0.15,0.25,0.35,0.45,0.55,0.65 \ forrest@0: ,0.75,0.85,0.91,0.92,0.93,0.94,0.96,0.97,0.98 /) forrest@0: angmTM = acos(mTM)/rad ; angles: correlation labels forrest@0: radmTM = xyMax*(1.-(1.-tmEnd)*0.5) ; radius end: minor TM forrest@0: forrest@0: dum7 = new(dimsizes(mTM),graphic) forrest@0: forrest@0: do i=0,dimsizes(mTM)-1 ; manually add tm forrest@0: xTM(0) = xyMax*cos(angmTM(i)*rad) ; minor tickmarks forrest@0: yTM(0) = xyMax*sin(angmTM(i)*rad) forrest@0: xTM(1) = radmTM*cos(angmTM(i)*rad) forrest@0: yTM(1) = radmTM*sin(angmTM(i)*rad) forrest@0: dum7(i) = gsn_add_polyline(wks,taylor,xTM,yTM,plRes) forrest@0: end do forrest@0: ; added for Wanli forrest@0: if (rOpts .and. isatt(rOpts,"ccRays") ) then forrest@0: angRL = acos(rOpts@ccRays)/rad ; angles: radial lines forrest@0: forrest@0: rlRes = True forrest@0: rlRes@xyDashPattern = 4 ; line pattern forrest@0: rlRes@xyLineThicknessF = 1 ; choose line thickness forrest@0: forrest@0: dum8 = new(dimsizes(angRL),graphic) forrest@0: do i=0,dimsizes(angRL)-1 forrest@0: xRL = xyMax*cos(angRL(i)*rad) forrest@0: yRL = xyMax*sin(angRL(i)*rad) forrest@0: dum8(i) = gsn_add_polyline(wks,taylor,(/0, xRL /),(/0, yRL /),rlRes) forrest@0: end do forrest@0: taylor@$unique_string("dum")$ = dum8 forrest@0: end if forrest@0: forrest@0: ; ---------------------------------------------------------------- forrest@0: ; Part 3: forrest@0: ; Concentric about 1.0 on XB axis forrest@0: ; I think this is correct. Still test mode. forrest@0: ; ---------------------------------------------------------------- forrest@0: if (rOpts .and. isatt(rOpts,"centerDiffRMS") \ forrest@0: .and. rOpts@centerDiffRMS) then forrest@0: respl = True ; polyline mods desired forrest@0: respl@gsLineThicknessF = 1.0 ; line thickness forrest@0: respl@gsLineColor = "Black" ; line color forrest@0: respl@gsLineDashPattern = 2 ; short dash lines forrest@0: forrest@0: dx = 0.25 forrest@0: ncon = 4 ; 0.75, 0.50, 0.25, 0.0 forrest@0: npts = 100 ; arbitrary forrest@0: ang = fspan(180,360,npts)*rad forrest@0: forrest@0: dum9 = new(ncon,graphic) forrest@0: forrest@0: do n=1,ncon forrest@0: rr = n*dx ; radius from 1.0 [OBS] abscissa forrest@0: xx = 1. + rr*cos(ang) forrest@0: yy = fabs( rr*sin(ang) ) forrest@0: if (n.le.2) then forrest@0: dum9(n-1) = gsn_add_polyline(wks,taylor,xx,yy,respl) forrest@0: end if forrest@0: if (n.eq.3) then forrest@0: n3 = floattointeger( 0.77*npts ) forrest@0: dum9(n-1) = gsn_add_polyline(wks,taylor,xx(0:n3),yy(0:n3),respl) forrest@0: end if forrest@0: if (n.eq.4) then forrest@0: n4 = floattointeger( 0.61*npts ) forrest@0: dum9(n-1) = gsn_add_polyline(wks,taylor,xx(0:n4),yy(0:n4),respl) forrest@0: end if forrest@0: end do forrest@0: delete(ang) forrest@0: delete(xx) forrest@0: delete(yy) forrest@0: taylor@$unique_string("dum")$ = dum9 forrest@0: forrest@0: end if forrest@0: ; --------------------------------------------------------------- forrest@0: ; Part 4: forrest@0: ; generic resources that will be applied to all users data points forrest@0: ; of course, these can be changed forrest@0: ; http://www.ncl.ucar.edu/Document/Graphics/Resources/gs.shtml forrest@0: ; --------------------------------------------------------------- forrest@0: if (rOpts .and. isatt(rOpts,"Markers")) then forrest@0: Markers = rOpts@Markers forrest@0: else forrest@0: Markers = (/ 4, 6, 8, 0, 9, 12, 7, 2, 11, 16/) ; Marker Indices forrest@0: end if forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"Colors")) then forrest@0: Colors = rOpts@Colors forrest@0: else forrest@0: Colors = (/ "red", "blue", "green", "cyan", "orange" \ forrest@0: , "torquoise", "brown", "yellow", "purple", "black"/) forrest@0: end if forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"gsMarkerThicknessF")) then forrest@0: gsMarkerThicknessF = rOpts@gsMarkerThicknessF forrest@0: else forrest@0: gsMarkerThicknessF = 1.0 forrest@0: end if forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"gsMarkerSizeF")) then forrest@0: gsMarkerSizeF = rOpts@gsMarkerSizeF forrest@0: else forrest@0: gsMarkerSizeF = 0.0085 ; Default: 0.007 forrest@0: end if forrest@0: forrest@0: gsRes = True forrest@0: gsRes@gsMarkerThicknessF = gsMarkerThicknessF ; default=1.0 forrest@0: gsRes@gsMarkerSizeF = gsMarkerSizeF ; Default: 0.007 forrest@0: forrest@0: ptRes = True ; text options for points forrest@0: ptRes@txJust = "BottomCenter"; Default="CenterCenter". forrest@0: ptRes@txFontThicknessF = 1.2 ; default=1.00 forrest@0: ptRes@txFontHeightF = 0.0125 ; default=0.05 forrest@0: if (rOpts .and. isatt(rOpts,"txFontHeightF")) then forrest@0: ptRes@txFontHeightF = rOpts@txFontHeightF forrest@0: end if forrest@0: forrest@0: markerTxYOffset = 0.0175 ; default forrest@0: if (rOpts .and. isatt(rOpts,"markerTxYOffset")) then forrest@0: markerTxYOffset = rOpts@markerTxYOffset ; user defined offset forrest@0: end if forrest@0: forrest@0: dum10 = new((nCase*nVar),graphic) forrest@0: dum11 = dum10 forrest@0: forrest@0: do n=0,nCase-1 forrest@0: gsRes@gsMarkerIndex = Markers(n) ; marker style (+) forrest@0: gsRes@gsMarkerColor = Colors(n) ; marker color forrest@0: ptRes@txFontColor = gsRes@gsMarkerColor forrest@0: do i=0,nVar-1 forrest@0: dum10(n*nVar+i) = gsn_add_polymarker(wks,taylor,X(n,i),Y(n,i),gsRes) forrest@0: ; dum11(n*nVar+i) = gsn_add_text(wks,taylor,(i+1),X(n,i),Y(n,i)+markerTxYOffset,ptRes) forrest@0: end do forrest@0: end do forrest@0: forrest@0: ; --------------------------------------------------------------- forrest@0: ; Part 5: ; add case legend and variable labels forrest@0: ; --------------------------------------------------------------- forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"caseLabels")) then forrest@0: forrest@0: if (isatt(rOpts,"caseLabelsFontHeightF")) then forrest@0: caseLabelsFontHeightF = rOpts@caseLabelsFontHeightF forrest@0: else forrest@0: ; caseLabelsFontHeightF = 0.05 forrest@0: caseLabelsFontHeightF = 0.15 forrest@0: end if forrest@0: forrest@0: lgres = True forrest@0: lgres@lgMarkerColors = Colors ; colors of markers forrest@0: lgres@lgMarkerIndexes = Markers ; Markers forrest@0: lgres@lgMarkerSizeF = gsMarkerSizeF ; Marker size forrest@0: lgres@lgItemType = "Markers" ; draw markers only forrest@0: lgres@lgLabelFontHeightF = caseLabelsFontHeightF ; font height of legend case labels forrest@0: forrest@0: if (isatt(rOpts,"legendWidth")) then forrest@0: lgres@vpWidthF = rOpts@legendWidth forrest@0: else forrest@0: lgres@vpWidthF = 0.15 ; width of legend (NDC) forrest@0: end if forrest@0: forrest@0: if (isatt(rOpts,"legendHeight")) then forrest@0: lgres@vpHeightF = rOpts@legendHeight forrest@0: else forrest@0: lgres@vpHeightF = 0.030*nCase ; height of legend (NDC) forrest@0: end if forrest@0: forrest@0: lgres@lgPerimOn = False ; turn off perimeter forrest@0: nModel = dimsizes( rOpts@caseLabels ) forrest@0: lbid = gsn_create_legend(wks,nModel,rOpts@caseLabels,lgres) forrest@0: forrest@0: amres = True forrest@0: amres@amParallelPosF = 0.35 forrest@0: amres@amOrthogonalPosF = -0.35 forrest@0: annoid1 = gsn_add_annotation(taylor,lbid,amres) ; add legend to plot forrest@0: end if forrest@0: forrest@0: if (rOpts .and. isatt(rOpts,"varLabels")) then forrest@0: nVar = dimsizes(rOpts@varLabels) forrest@0: forrest@0: if (isatt(rOpts,"varLabelsFontHeightF")) then forrest@0: varLabelsFontHeightF = rOpts@varLabelsFontHeightF forrest@0: else forrest@0: varLabelsFontHeightF = 0.013 forrest@0: end if forrest@0: forrest@0: txres = True forrest@0: txres@txFontHeightF = varLabelsFontHeightF forrest@0: txres@txJust = "CenterLeft" ; justify to the center left forrest@0: forrest@0: ;delta_y = 0.02 forrest@0: delta_y = 0.06 forrest@0: if (rOpts .and. isatt(rOpts,"varLabelsYloc")) then forrest@0: ys = rOpts@varLabelsYloc ; user specified forrest@0: else forrest@0: ys = max( (/nVar*delta_y , 0.30/) ) forrest@0: end if forrest@0: forrest@0: forrest@0: do i = 1,nVar forrest@0: if (i.eq.1) then forrest@0: dum12 = new(nVar,graphic) forrest@0: end if forrest@0: forrest@0: dum12(i-1) = gsn_add_text(wks,taylor,i+" - "+rOpts@varLabels(i-1), .125,ys,txres) forrest@0: ys = ys- delta_y forrest@0: end do forrest@0: forrest@0: taylor@$unique_string("dum")$ = dum12 forrest@0: end if forrest@0: forrest@0: taylor@$unique_string("dum")$ = dum0 ; x-axis forrest@0: taylor@$unique_string("dum")$ = dum1 ; y-axis forrest@0: taylor@$unique_string("dum")$ = dum2 ; 1.0 std curve forrest@0: taylor@$unique_string("dum")$ = dum5 ; labels [COR] forrest@0: taylor@$unique_string("dum")$ = dum6 ; major tm [COR] forrest@0: taylor@$unique_string("dum")$ = dum7 ; minor tm forrest@0: taylor@$unique_string("dum")$ = dum10 ; markers forrest@0: taylor@$unique_string("dum")$ = dum11 ; text forrest@0: forrest@0: if (.not.isatt(rOpts,"taylorDraw") .or. \ forrest@0: (isatt(rOpts,"taylorDraw") .and. rOpts@taylorDraw)) then forrest@0: draw(taylor) forrest@0: end if forrest@0: if (.not.isatt(rOpts,"taylorFrame") .or. \ forrest@0: (isatt(rOpts,"taylorFrame") .and. rOpts@taylorFrame)) then forrest@0: frame(wks) forrest@0: end if forrest@0: return(taylor) forrest@0: end forrest@0: