mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ; xy_29.ncl
 | |
| ;
 | |
| ; Concepts illustrated:
 | |
| ;   - Reading data from an ASCII file with headers
 | |
| ;   - Creating a separate procedure to create a specific plot
 | |
| ;   - Attaching polymarkers to an XY plot
 | |
| ;
 | |
| ; This script was originally from Dr. Birgit Hassler (NOAA)
 | |
| ;****************************************************
 | |
| 
 | |
| 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"
 | |
| 
 | |
| ;************************************************
 | |
| ;             Plot Procedure
 | |
| ;************************************************
 | |
| procedure plotTCOPolym(pltName[1]:string, pltType[1]:string, filName[1]:string \
 | |
|                    ,xTitle[1]:string , yTitle[1]:string \ 
 | |
|                    ,year[*]:numeric, y[*]:numeric)
 | |
| local wks, res, ntim, gsres, MarkerCol, OldYear, i, xmarker, ymarker
 | |
|   
 | |
| begin
 | |
|   wks = gsn_open_wks(pltType,pltName)
 | |
|   gsn_define_colormap(wks,"default")
 | |
|   
 | |
|   res = True
 | |
|   res@gsnMaximize    = True            ; make "ps", "eps", "pdf" large
 | |
| 
 | |
|   res@vpHeightF      = 0.5             ; change aspect ratio of plot
 | |
|   res@vpWidthF       = 0.75                 
 | |
|   res@vpXF           = 0.15            ; start plot at x ndc coord 
 | |
|   res@tiXAxisString  = xTitle     
 | |
|   res@tiYAxisString  = yTitle     
 | |
|   res@tiMainString   = filName
 | |
| 
 | |
|   ntim   = dimsizes(year)
 | |
|   res@trXMinF = year(0)-1        
 | |
|   res@trXMaxF = year(ntim-1)+1        
 | |
| 
 | |
|   res@gsnDraw        = False
 | |
|   res@gsnFrame       = False
 | |
|   res@xyMarkLineMode = "markers"
 | |
|   res@xyMarker       = 16
 | |
|   res@xyMarkerColor  = "Background"                     
 | |
|   plot               = gsn_csm_xy (wks,year,y,res) ; create plot frame ork
 | |
|   
 | |
|                      ; add different color polymarkers for each year 
 | |
|   gsres     = True
 | |
|   MarkerCol = 2
 | |
|   OldYear   = year(0)
 | |
|   
 | |
|   do i=0,ntim-1 
 | |
|     xmarker = year(i)
 | |
|     ymarker = y(i)
 | |
|     
 | |
|     if (i.gt.0) then 
 | |
|       if (year(i).gt.OldYear) then
 | |
|         MarkerCol = MarkerCol+1
 | |
|       end if
 | |
|       OldYear = year(i)
 | |
|     end if
 | |
|     
 | |
|     gsres@gsMarkerColor = MarkerCol
 | |
|     gsres@gsMarkerIndex = 16
 | |
|    ;gsres@gsMarkerSizeF = 15.0
 | |
|                         ; add (attach) polymarkers to existing plot object 
 | |
|     plot@$unique_string("dum")$ = gsn_add_polymarker(wks,plot,xmarker,ymarker,gsres)
 | |
|   end do
 | |
| 
 | |
|   draw(plot)
 | |
|   frame(wks)
 | |
| end
 | |
| 
 | |
| ;***********************************************************
 | |
| ;                   MAIN
 | |
| ;***********************************************************
 | |
|    pltType = "ps"      ; "ps", "eps", "png", "x11"
 | |
| 
 | |
|                        ; read multiple ascii file names
 | |
|  ;;fili = "Southpole_TCOTimeSeries_11.dat"
 | |
| 
 | |
|    diri = "./"
 | |
|    fili = systemfunc("cd "+diri+" ; ls *TCOT*dat")
 | |
|    print(fili)
 | |
| 
 | |
|    nfil = dimsizes(fili)
 | |
| 
 | |
|    nhead= 4      ; number of header lines on ascii file(s)
 | |
|    ncol = 4      ; year, month, day, O3
 | |
| 
 | |
|    do nf=0,nfil-1
 | |
|       sfx  = get_file_suffix(fili(nf), 0) ; sfx = ".dat"
 | |
|       filx = sfx@fBase                    ; filx= "Southpole_TCOTimeSeries_11"
 | |
|                                           ; read ascii files
 | |
|       data = readAsciiTable(diri+fili(nf), ncol, "float", nhead)
 | |
|       dimd = dimsizes(data)
 | |
|       ntim = dimd(0)                      ; # rows
 | |
| 
 | |
|       year = toint( data(:,0) )           ; user decision ... convert to integer
 | |
|       mon  = toint( data(:,1) )
 | |
|       day  = toint( data(:,2) )
 | |
|  
 | |
|       hour = new (ntim, "integer", "No_FillValue")
 | |
|       mn   = new (ntim, "integer", "No_FillValue")
 | |
|       sec  = new (ntim, "double" , "No_FillValue")
 | |
|       hour = 0
 | |
|       mn   = 0
 | |
|       sec  = 0d0
 | |
|                                           ; create COARDS/udunits time variable
 | |
|     ;;tunits = "days since 1900-01-01 00:00:0.0"
 | |
|       tunits = "days since "+year(0)+"-"+mon(0)+"-"+day(0)+" 00:00:0.0"
 | |
|       time   = cd_inv_calendar(year,mon,day,hour,mn,sec,tunits, 0)
 | |
|       time!0 = "time"
 | |
|       time&time = time
 | |
|       ;printVarSummary(time)
 | |
| 
 | |
|                                           ; create a Gregorin 'date' variable
 | |
|       date = year*10000 + mon*100 + day
 | |
|       date!0 = "time"
 | |
|       date@units = "yyyymmdd"
 | |
|       date&time = time
 | |
|      ;printVarSummary(date)
 | |
| 
 | |
|       O3   = data(:,3) 
 | |
|       O3@long_name = "total column ozone"
 | |
|       O3@units     = "DU"
 | |
| 
 | |
|       O3!0         = "time"
 | |
|       O3&time      = time
 | |
|      ;printVarSummary(O3)
 | |
|      ;print(" ")
 | |
|      ;print(date+"  "+time+"   "+O3)
 | |
| 
 | |
|                                           ; plot
 | |
|       yTitle = O3@long_name
 | |
|       year@long_name = "YEAR"
 | |
| 
 | |
|       plotTCOPolym (filx, pltType, fili(nf), year@long_name, yTitle,  year, O3) 
 | |
|      
 | |
|       delete(time) ; delete ... size (# rows) may change in the next file
 | |
|       delete(date)
 | |
|       delete(year)
 | |
|       delete(mon )
 | |
|       delete(day )
 | |
|       delete(mn  )
 | |
|       delete(sec )
 | |
|       delete(O3  )
 | |
|       delete(data)
 | |
|    end do
 | |
| 
 |