mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +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
|
|
|