mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ; ***********************************************
 | |
| ; viewport_4.ncl
 | |
| ;
 | |
| ; Concepts illustrated:
 | |
| ;   - Drawing an XY plot with multiple curves
 | |
| ;   - Using drawNDCGrid to draw a nicely labeled NDC grid
 | |
| ;   - Changing the size/shape of an XY plot using viewport resources
 | |
| ;   - Drawing two XY plots on the same page using viewport resources
 | |
| ;   - Drawing polylines, polymarkers, and text in NDC space
 | |
| ;   - Using "getvalues" to retrieve resource values
 | |
| ;   - Maximizing plots after they've been created
 | |
| ; ***********************************************
 | |
| 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"
 | |
| 
 | |
| ;********************************************************************
 | |
| ; Draw a box around the viewport of the given object..
 | |
| ;********************************************************************
 | |
| procedure draw_vp_box(wks,plot)
 | |
| local vpx, vpy, vpw, vph, xbox, ybox, lnres, mkres, txres
 | |
| begin
 | |
| 
 | |
| ; Retrieve the viewport values of the drawable object.
 | |
|   getvalues plot
 | |
|     "vpXF"      : vpx
 | |
|     "vpYF"      : vpy
 | |
|     "vpWidthF"  : vpw
 | |
|     "vpHeightF" : vph
 | |
|   end getvalues
 | |
| 
 | |
| ; Set up some marker resources.
 | |
|   mkres                  = True
 | |
|   mkres@gsMarkerIndex    = 16     ; filled dot
 | |
|   mkres@gsMarkerSizeF    = 0.02   ; larger than default
 | |
|   mkres@gsMarkerColor    = "Red"
 | |
| 
 | |
| ; Draw a single marker at the vpXF/vpYF location.
 | |
|   gsn_polymarker_ndc(wks,vpx,vpy,mkres)
 | |
| 
 | |
| 
 | |
| ; Set up some text resources.
 | |
|   txres                       = True  
 | |
|   txres@txJust                = "BottomLeft"
 | |
|   txres@txFontHeightF         = 0.018
 | |
|   txres@txFontColor           = "Blue"
 | |
|   txres@txBackgroundFillColor = "white"
 | |
| 
 | |
|   gsn_text_ndc(wks,"(vpXF="+vpx+", vpYF="+vpy+")",vpx,vpy+0.02,txres)
 | |
| ; Set up some line resources.
 | |
|   lnres                  = True
 | |
|   lnres@gsLineColor      = "Red"       ; line color
 | |
|   lnres@gsLineThicknessF = 2.0         ; 3.5 times as thick
 | |
| 
 | |
| ; Draw lines indicating the width and height
 | |
|   xline = (/vpx,     vpx+vpw/)
 | |
|   yline = (/vpy-0.05,vpy-0.05/)
 | |
|   gsn_polyline_ndc(wks,xline,yline,lnres)
 | |
| 
 | |
|   xline = (/vpx+0.05,vpx+0.05/)
 | |
|   yline = (/vpy,vpy-vph/)
 | |
|   gsn_polyline_ndc(wks,xline,yline,lnres)
 | |
| 
 | |
|   txres@txJust                = "CenterCenter"
 | |
|   gsn_text_ndc(wks,"vpWidthF = " + vpw,vpx+vpw/2.,vpy-0.05,txres)
 | |
| 
 | |
|   txres@txAngleF              = 90.
 | |
|   gsn_text_ndc(wks,"vpHeightF = " + vph,vpx+0.05,vpy-vph/2.,txres)
 | |
| end
 | |
| 
 | |
| ;********************************************************************
 | |
| ; Main code
 | |
| ;********************************************************************
 | |
| begin
 | |
| ;************************************************
 | |
| ; read in data
 | |
| ;************************************************
 | |
|   f     = addfile ("$NCARG_ROOT/lib/ncarg/data/cdf/uv300.nc","r")
 | |
|   u     = f->U                                    ; get u data
 | |
| ;************************************************
 | |
| ; plotting parameters
 | |
| ;************************************************
 | |
|   wks   = gsn_open_wks ("ps","viewport")          ; open workstation
 | |
|   
 | |
|   res                  = True                     ; plot mods desired
 | |
| 
 | |
|   res@gsnFrame         = False                    ; don't advance frame yet
 | |
| 
 | |
|   res@vpWidthF         = 0.8                      ; set width and height
 | |
|   res@vpHeightF        = 0.3
 | |
|   
 | |
| ; First plot  
 | |
|   res@tiMainString     = "Plot 1"
 | |
| 
 | |
|   res@vpXF             = 0.15
 | |
|   res@vpYF             = 0.9        ; Higher on the page
 | |
| 
 | |
|   plot1  = gsn_csm_xy (wks,u&lat,u(0,:,{82}),res) ; create plot
 | |
|   
 | |
| ; Second plot  
 | |
|   res@tiMainString     = "Plot 2"
 | |
| 
 | |
|   res@vpXF             = 0.15       ; Same X location as first plot
 | |
|   res@vpYF             = 0.4        ; Lower on the page
 | |
| 
 | |
|   plot2  = gsn_csm_xy (wks,u&lat,u(0,:,{3}),res) ; create plot
 | |
| 
 | |
| ; Advance the frame
 | |
|   frame(wks)
 | |
|   
 | |
| ; Now draw the two plots with illustrations.
 | |
| 
 | |
|   drawNDCGrid(wks)   ; Draw helpful grid lines showing NDC square.
 | |
| 
 | |
|   draw(plot1)        ; Draw the two plots
 | |
|   draw(plot2)
 | |
| 
 | |
|   draw_vp_box(wks,plot1)  ; Draw boxes around the two viewports.
 | |
|   draw_vp_box(wks,plot2)
 | |
| 
 | |
|   frame(wks)              ; Advance the frame.
 | |
| 
 | |
| 
 | |
| ;
 | |
| ; Uncomment the next two lines if you want to maximize these plots for
 | |
| ; PS or PDF output.
 | |
| ;
 | |
| ;  psres = True                                                               
 | |
| ;  maximize_output(wks,psres)  ; calls draw and frame for you 
 | |
| end
 |