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
 |