Appendices > A | B | C | D
The scripts and functions listed below are some of ones used in the old "Frequently asked questions" chapter of GSUN, and in appendix A. They are listed alphabetically.
2dgrid.ncl:
begin NX = 21 NY = 21 ; ; Define the input data arrays. ; x = (/0.00, 1.00, 0.00, 1.00, 0.40, 0.75/) y = (/0.00, 0.00, 1.00, 1.00, 0.20, 0.65/) z = (/0.00, 0.00, 0.00, 0.00, 1.25, 0.80/) ; ; Define the output grid. ; xc = 1./(NX-1.) xo = ispan(0,NX-1,1) * xc yc = 1./(NY-1.) yo = ispan(0,NY-1,1) * yc ; ; Do the gridding using natgrids. "natout" will be a 2-dimensional array ; dimensioned 21 x 21. ; natout = natgrids(x, y, z, xo, yo) print(natout) ; ; Do the gridding using dsgrid2s. "dsout" will be a 2-dimensional array ; dimensioned 21 x 21. ; dsout = dsgrid2s(x, y, z, xo, yo) print(dsout) end3dgrid.ncl:
begin NX = 21 NY = 21 NZ = 21 x = (/0.00, 1.00, 0.00, 1.00, 0.40, 0.75/) y = (/0.00, 0.00, 1.00, 1.00, 0.20, 0.65/) z = (/0.00, 0.00, 0.00, 0.00, 1.25, 0.80/) u = x*x + y*y + z*z xo = new((/NX/),float) yo = new((/NY/),float) zo = new((/NZ/),float) ; ; Create the output grid. ; xmin = -2.0 ymin = -2.0 zmin = -2.0 xmax = 2.0 ymax = 2.0 zmax = 2.0 ii = fspan(0,20.,21) xo = xmin + (ii/(NX-1)) * (xmax-xmin) yo = ymin + (ii/(NY-1)) * (ymax-ymin) zo = zmin + (ii/(NZ-1)) * (zmax-zmin) ; ; Interpolate. "output" will be a 3-dimensional grid dimensioned 21x21x21. ; output = dsgrid3s(x, y, z, u, xo, yo, zo) print(output) endcolor.ncl:
; ; This example shows how to use hsv2rgb to generate a color map. You ; change the values for ncolors, beg_hue, end_hue, beg_sat, end_sat, ; beg_val, and end_val and it will generate a labelbar showing the color map. ; load "hsv2rgb.ncl" begin ncolors = 16 ; Number of colors beg_hue = 225. ; begin HUE value end_hue = 360. ; end HUE value beg_sat = 0.67 ; begin SAT value end_sat = 0.67 ; end SAT value beg_val = 1.0 ; begin VAL value end_val = 1.0 ; end VAL value if(ncolors.gt.254) print("Error: ncolors must be between 1 and 254 inclusive") exit else label_stride = (ncolors/25)+1 ; Make sure we don't have too many labels end if hue = fspan(beg_hue,end_hue,ncolors) ; Set hue range. sat = fspan(beg_sat,end_sat,ncolors) ; Set saturation range. val = fspan(beg_val,end_val,ncolors) ; Set value range. cmap = new((/ncolors+2,3/),float) ; Define (ncolors+2) x 3 float ; array to hold the color map. cmap(0,:) = (/1.,1.,1./) ; Set the background to white. cmap(1,:) = (/0.,0.,0./) ; Set the foreground to black. cmap(2:ncolors+1,:) = hsv2rgb(hue,sat,val) ; Generate smooth range of ; RGB values. wks = create "wks" xWorkstationClass defaultapp "wkColorMap" : cmap end create lb = create "labelbar" labelBarClass wks "vpXF" : 0.10 "vpYF" : 0.98 "vpWidthF" : 0.97 "vpHeightF" : 0.97 "lbLabelStride" : label_stride "lbFillColors" : ispan(0,ncolors+1,1) "lbLabelStrings" : ":F26:Color " + ispan(0,ncolors+1,1) "lbMonoFillPattern" : True "lbBoxCount" : ncolors+2 "lbPerimOn" : False "lbTitleFontHeightF": 0.02 "lbAutoManage" : False "lbTitleString" : ":F22:ncolors = " + ncolors + \ " :C:hue (" + beg_hue + "," + end_hue + \ "):C:sat (" + beg_sat + "," + end_sat + \ "):C:val (" + beg_val + "," + end_val + ")" end create draw(lb) frame(wks) endconmap.ncl:
begin path = ncargpath("data") file1 = addfile(path+"/cdf/941110_UV.cdf","r") ; open netCDF file u = file1->u ; read U and V v = file1->v spd = sqrt(u*u+v*v) ; compute the wind speed ; Create an X11 window. wks = create "x11" xWorkstationClass defaultapp "wkColorMap" : "temp1" ; use a predefined color map "wkForegroundColor" : "Black" "wkBackgroundColor" : "White" end create lon = file1->lon ; store lat/lon values to local variables lat = file1->lat ; Create the data object needed by ContourPlot. cndata = create "cndata" scalarFieldClass defaultapp "sfDataArray": spd "sfXCStartV" : lon(0) "sfXCEndV" : lon(dimsizes(lon)-1) "sfYCStartV" : lat(0) "sfYCEndV" : lat(dimsizes(lat)-1) end create ; Create the ContourPlot object and assign data to it contour = create "cn_plot" contourPlotClass wks "cnScalarFieldData" : cndata ; assign the data object "cnFillOn" : True ; turn on contour fill "cnFillColors" : ispan(2,63,4) ; array of color indices "cnLinesOn" : False ; turn off contour lines "cnLineLabelsOn" : False ; turn off contour lines "cnInfoLabelOrthogonalPosF" : 0.15 "cnInfoLabelFontHeightF" : 0.013 "cnInfoLabelFont" : "Helvetica" end create map = create "map" mapPlotClass wks "mpGridAndLimbOn" : False ; turn off grid lines "vpXF" : 0.1 "vpYF" : 0.9 "vpWidthF" : 0.8 "vpHeightF" : 0.8 end create overlay(map,contour) ; Overlay the contour plot on the map plot getvalues map "vpXF" : vpxf ; Retrieve viewport of map so that we "vpYF" : vpyf ; can draw tickmarks in same location. "vpWidthF" : vpwf "vpHeightF" : vphf end getvalues tickmark = create "tickmarks" tickMarkClass wks "vpXF" : vpxf "vpYF" : vpyf "vpHeightF" : vphf "vpWidthF" : vpwf "tmXBDataLeftF" : lon(0) ; Define the tick mark "tmXBDataRightF" : lon(dimsizes(lon)-1) ; mins and maxes. "tmYLDataBottomF" : lat(0) "tmYLDataTopF" : lat(dimsizes(lat)-1) "tmXBMode" : "Explicit" "tmXBLabels" : (/"180W","120W","60W","0","60E","120E","180E"/) "tmXBValues" : (/-180.,-120.,-60.,0,60,120,180/) "tmXBMinorOn" : False "tmXBLabelFont" : "Helvetica" "tmXBLabelFontHeightF" : 0.016 "tmYLMode" : "Explicit" "tmYLLabels" : (/"90S","60S","30S","0","30N","60N","90N"/) "tmYLValues" : (/-90, -60,-30,0,30,60,90/) "tmYLMinorOn" : False "tmYLLabelFont" : "Helvetica" "tmYLLabelFontHeightF" : 0.016 "tmXBMajorLengthF" : 0.016 ; Make portion of outward tickmark "tmXBMajorOutwardLengthF" : 0.016 ; the same length as whole tickmark "tmYLMajorLengthF" : 0.016 ; so that the whole tickmark is "tmYLMajorOutwardLengthF" : 0.016 ; pointing outward. end create ; Add the tick mark object as an annotation of the map object, so that ; whenever the map object is drawn the tick mark object will also be ; drawn. It will also be rescaled automatically. anno = NhlAddAnnotation(map,tickmark) setvalues anno "amZone" : 0 ; Zone 0 centers tick marks over map. "amResizeNotify" : True ; Resize tick marks if map resized. end setvalues draw(map) ; this call will draw the map, contours, and tickmarks frame(wks) endfillcon.ncl:
begin ; ; Create some data for the contour plot. ; N=25 T = new((/N,N/),float) jspn = ispan(-N/2,N/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" scalarFieldClass defaultapp "sfDataArray" : T end create ; ; Create a ContourPlot object. ; cnid = create "ContourPlot" contourPlotClass wid "cnScalarFieldData" : dataid "cnFillOn" : True ; Turn on contour level fill. "cnMonoFillPattern" : False ; Indicate you want multiple fill patterns. ; ; Set cnFillPatterns and cnFillColors to various indexes representing ; fill patterns and colors. A fill pattern index of "0" is solid fill. ; If you don't want any fill for a particular contour level, set it ; to "-1," which means "transparent." ; "cnFillPatterns" : (/0, 2, 3, 0, 6, 8,10,-1, 9, 0,11,12,17,16/) "cnFillColors" : (/1,10,14, 8, 4, 2, 9, 1,12, 3, 1,13, 5, 7/) end create draw(cnid) ; Draw contour plot. frame(wid) ; Advance frame. endfont.ncl:
begin ; ; An application object must be created so that we can have a resource ; file. The resource file should be the name name given to the ; application object ("font" in this case") with a ".res" appended. ; appid = create "font" appClass defaultapp "appDefaultParent" : True end create ; ; Create an X Workstation. ; wks = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" coordArraysClass appid "caYArray" : (/1,3,-1,-2,0,2,3/) end create ; ; Create an XY plot. ; xy = create "xyplot" xyPlotClass wks "xyCoordData" : dataid "tiMainString" : "This is an XY plot" "tiXAxisString" : "X values" "tiYAxisString" : "Y values" end create draw(xy) ; Draw the plot. frame(wks) ; Advance the frame. endgsn_add_poly.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin x = new(64,float) x = ispan(1,64,1) ; X points for first XY plot y = sin(3.14159*x/32.) ; Y points for first XY plot xx = (/1.,32.,64/) ; X points for straight line ytopline = (/ 0.5, 0.5, 0.5/) ; Top line ymidline = (/ 0.0, 0.0, 0.0/) ; Middle line ybotline = (/-0.5,-0.5,-0.5/) ; Bottom line xdots = x(26:36:5) ; X and Y coordinates for polymarkers. ydots = y(26:36:5) xsquare = (/16.0,48.0,48.0,16.0,16.0/) ; X and Y coordinates ysquare = (/-0.5,-0.5, 0.5, 0.5,-0.5/) ; for polygon. wks = gsn_open_wks("ncgm","primitives") gsn_define_colormap(wks,(/"white","black","blue","hotpink",\ "yellow","green"/)) xyres = True xyres@gsnDraw = False xyres@gsnFrame = False xy1 = gsn_xy(wks,x,y,xyres) ; Create XY plot, don't draw it or ; advance the frame. gsres = True gsres@gsEdgesOn = True ; Line will be drawn around polygon. gsres@gsEdgeDashPattern = 2 ; Make this line dashed. gsres@gsLineColor = "Blue" gsres@gsMarkerColor = "HotPink" gsres@gsFillColor = "Yellow" gsres@gsMarkerIndex = 16 ; dots gsres@gsMarkerSizeF = 0.014 ; twice normal size gsres@gsLineThicknessF = 3.0 ; thrice thickness ; ; Add primitives to plot. They will be drawn in the order ; they are added, so some primitives may cover other ones. ; prim1 = gsn_add_polyline(wks,xy1,xx,ymidline,gsres) prim2 = gsn_add_polygon(wks,xy1,xsquare,ysquare,gsres) prim3 = gsn_add_polyline(wks,xy1,xx,ytopline,gsres) prim4 = gsn_add_polyline(wks,xy1,xx,ybotline,gsres) gsres@gsLineColor = "Green" prim5 = gsn_add_polyline(wks,xy1,x(26:36),y(26:36),gsres) prim6 = gsn_add_polymarker(wks,xy1,xdots,ydots,gsres) ; ; New Y points for second XY plot. ; y = cos(3.14159*x/32.) xy2 = gsn_xy(wks,x,y,xyres) ; Create but don't draw XY plot. ; ; Add primitives to second plot. ; gsres@gsLineColor = "Blue" prim7 = gsn_add_polyline(wks,xy2,xx,ymidline,gsres) prim8 = gsn_add_polygon(wks,xy2,xsquare,ysquare,gsres) prim9 = gsn_add_polyline(wks,xy2,xx,ytopline,gsres) prim10 = gsn_add_polyline(wks,xy2,xx,ybotline,gsres) gsres@gsLineColor = "Green" xdots2 = x(15:20:5) ydots2 = y(15:20:5) prim11 = gsn_add_polyline(wks,xy2,x(15:20),y(15:20),gsres) prim12 = gsn_add_polymarker(wks,xy2,xdots2,ydots2,gsres) xdots2 = x(42:47:5) ydots2 = y(42:47:5) prim13 = gsn_add_polyline(wks,xy2,x(42:47),y(42:47),gsres) prim14 = gsn_add_polymarker(wks,xy2,xdots2,ydots2,gsres) ; ; Put these two plots on the same frame. ; gsn_panel(wks,(/xy1,xy2/),(/2,1/),False) endgsn_add_text.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin PI = 3.14159 x = new(64,float) x = ispan(1,64,1) ; X points for both XY plots y1 = sin(PI*x/32.) ; Y points for first XY plot y2 = cos(PI*x/32.) ; Y points for first XY plot wks = gsn_open_wks("ncgm","gsn_add_text") gsn_define_colormap(wks,(/"white","black","blue","hotpink",\ "yellow","green"/)) xyres = True xyres@gsnDraw = False xyres@gsnFrame = False xy1 = gsn_xy(wks,x,y1,xyres) ; Create 2 XY plots; don't draw them xy2 = gsn_xy(wks,x,y2,xyres) ; advance the frame. txres = True txres@txFont = "Helvetica-bold" ; change the font ; ; Add text to first plot. ; txres@txFontColor = "blue" ; change the font color anno = gsn_add_text(wks,xy1,"this is a",20.,0.3,txres) ; ; Add text to second plot. ; txres@txFontColor = "green" ; change the font color anno = gsn_add_text(wks,xy2,"text string",10.,0.0,txres) ; ; Panel the plots. ; gsn_panel(wks,(/xy1,xy2/),(/2,1/),False) endgsn_attach_plots.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Read in some data. ; datadir = "$NCARG_ROOT/lib/ncarg/data/asc/" datafile = "u.cocos" data = asciiread(datadir + datafile,(/39,14/),"float") ; ; Open a workstation. ; wks = gsn_open_wks("ncgm","attach") pressure = data(:,0) ; First column of data is pressure (mb). u = data(:,2:13) ; Rest of columns are climatological zonal winds xyres = True xyres@vpWidthF = 0.8 xyres@vpHeightF = 0.4 xyres@gsnDraw = False xyres@gsnFrame = False ; ; Create three XY plots. ; xy1 = gsn_xy(wks,ispan(0,12,1),u(0,:),xyres) xy2 = gsn_xy(wks,ispan(0,12,1),u(1,:),xyres) xy3 = gsn_xy(wks,ispan(0,12,1),u(2,:),xyres) ; ; Attach these plots, by first attaching plot 3 to plot 2, and then ; by attaching the new plot 2 to plot1. ; ; Make sure the variable returned by gsn_attach_plots is unique ; every time. ; res2 = True res2@gsnAttachPlotsXAxis = True anno1 = gsn_attach_plots(xy2,xy3,False,res2) anno2 = gsn_attach_plots(xy1,xy2,False,res2) draw(xy1) ; Draw attached plots. frame(wks) ; Advance the frame. endgsn_color.ncl:
; ; This example shows how to use hsv2rgb to generate a color map. You ; change the values for ncolors, beg_hue, end_hue, beg_sat, end_sat, ; beg_val, and end_val and it will generate a labelbar showing the color map. ; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ncolors = 16 ; Number of colors beg_hue = 225. ; begin HUE value end_hue = 360. ; end HUE value beg_sat = 0.67 ; begin SAT value end_sat = 0.67 ; end SAT value beg_val = 1.0 ; begin VAL value end_val = 1.0 ; end VAL value if(ncolors.gt.254) print("Error: ncolors must be between 1 and 254 inclusive") exit else label_stride = (ncolors/25)+1 ; Make sure we don't have too many labels end if hue = fspan(beg_hue,end_hue,ncolors) ; Set hue range. sat = fspan(beg_sat,end_sat,ncolors) ; Set saturation range. val = fspan(beg_val,end_val,ncolors) ; Set value range. cmap = new((/ncolors+2,3/),float) ; Define (ncolors+2) x 3 float ; array to hold the color map. cmap(0,:) = (/1.,1.,1./) ; Set the background to white. cmap(1,:) = (/0.,0.,0./) ; Set the foreground to black. cmap(2:ncolors+1,:) = hsv2rgb(hue,sat,val) ; Generate smooth range of ; RGB values. wks = gsn_open_wks("x11","gsn_color") gsn_define_colormap(wks,cmap) ; Set the color map. ; ; Define some labelbar resources. ; lbres = True lbres@vpWidthF = 0.97 lbres@vpHeightF = 0.97 lbres@lbLabelStride = label_stride lbres@lbFillColors = ispan(0,ncolors+1,1) lbres@lbMonoFillPattern = True lbres@lbPerimOn = False lbres@lbTitleFontHeightF= 0.02 lbres@lbLabelFontHeightF= 0.015 lbres@lbAutoManage = False lbres@lbTitleString = ":F22:ncolors = " + ncolors + \ " :C:hue (" + beg_hue + "," + end_hue + \ "):C:sat (" + beg_sat + "," + end_sat + \ "):C:val (" + beg_val + "," + end_val + ")" labels = ":F26:Color " + ispan(0,ncolors+1,1) gsn_labelbar_ndc(wks,ncolors+2,labels,0.10,0.98,lbres) ; Draw a labelbar frame(wks) ; Advance the frame. endgsn_conmap.ncl:
; ; This example shows how to create a polar stereographic plot with ; the lat/lon grid labeled. ; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "gsn_csm.ncl" begin path = ncargpath("data") file1 = addfile(path+"/cdf/941110_UV.cdf","r") ; open netCDF file u = file1->u ; read U and V v = file1->v spd = sqrt(u*u+v*v) ; compute the wind speed spd!0 = "lat" spd!1 = "lon" spd&lat = file1->lat spd&lon = file1->lon type = "x11" type@wkColorMap = "temp1" wks = gsn_open_wks(type,"gsn_conmap") cnres = True cnres@gsnAddCyclic = False ; Don't add a cyclic point. cnres@cnFillOn = True ; turn on contour fill cnres@cnFillColors = ispan(2,63,4) ; array of color indices cnres@cnLinesOn = False ; turn off contour lines cnres@cnLineLabelsOn = False ; turn off contour lines contour= gsn_csm_contour_map(wks,spd,cnres) endgsn_draw_colormap.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("ncgm","gsn_draw_colormap") gsn_draw_colormap(wks) ; Draw the default colormap gsn_define_colormap(wks,"hotres") ; Change color map and gsn_draw_colormap(wks) ; draw it. endgsn_fillcon.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create some data for the contour plot. ; N=25 T = new((/N,N/),float) jspn = ispan(-N/2,N/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Create an X workstation. ; wks = gsn_open_wks("x11","gsn_fillcon") ; Open an X11 workstation. cnres = True cnres@cnFillOn = True ; Turn on contour level fill. cnres@cnMonoFillPattern = False ; Indicate you want multiple fill patterns. ; ; Set cnFillPatterns and cnFillColors to various indexes representing ; fill patterns and colors. A fill pattern index of "0" is solid fill. ; If you don't want any fill for a particular contour level, set it ; to "-1," which means "transparent." ; cnres@cnFillPatterns = (/0, 2, 3, 0, 6, 8,10,-1, 9, 0,11,12,17,16/) cnres@cnFillColors = (/1,10,14, 8, 4, 2, 9, 1,12, 3, 1,13, 5, 7/) contour = gsn_contour(wks,T,cnres) endgsn_font.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","font") ; Open an X11 workstation. y = (/1,3,-1,-2,0,2,3/) x = ispan(0,dimsizes(y)-1,1) xyres = True xyres@tiMainString = "This is an XY plot" xyres@tiXAxisString = "X values" xyres@tiYAxisString = "Y values" xy = gsn_xy(wks,x,y,xyres) ; Create and draw an XY plot. endgsn_labelbar.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Open NetCDF file containing Geo-Potential height forecast ; information. ; filedir = ncargpath("data") filename = filedir + "/cdf/contour.cdf" cfile = addfile(filename,"r") ; ; Set the color map. ; ncolors = 13 hue = fspan(0.,300.,ncolors) ; Set hue range. sat = fspan(1.0,1.0,ncolors) ; Set saturation range. val = fspan(0.8,0.8,ncolors) ; Set value range. cmap = new((/ncolors+2,3/),float) ; Define (ncolors+2) x 3 float ; array to hold the color map. cmap(0,:) = (/1.,1.,1./) ; Set the background to white. cmap(1,:) = (/0.,0.,0./) ; Set the foreground to black. cmap(2:ncolors+1,:) = hsv2rgb(hue,sat,val) ; Generate smooth range of ; RGB values. ; ; Set up variable to hold four contour plots. ; contour = new(4,graphic) wks = gsn_open_wks("ncgm","gsn_labelbar") ; Open an X11 workstation. gsn_define_colormap(wks,cmap) ; ; Set up contour resources. ; cnres = True cnres@cnLevelSelectionMode = "ManualLevels" ; Manually select our cnres@cnMinLevelValF = 5400.0 ; own contour levels by cnres@cnMaxLevelValF = 5950.0 ; specifying min, max, cnres@cnLevelSpacingF = 50.0 ; and spacing. cnres@cnFillOn = True ; Turn on fill. cnres@cnLineLabelsOn = False ; Turn off line labels. cnres@cnInfoLabelOn = False ; Turn off info label. cnres@cnLowLabelsOn = False ; Turn off low label. cnres@cnHighLabelsOn = False ; Turn off high label. cnres@gsnDraw = False ; Don't draw the plot. cnres@gsnFrame = False ; Don't advance frame. contour(0) = gsn_contour(wks,cfile->Z(0,3,:,:),cnres) contour(1) = gsn_contour(wks,cfile->Z(1,3,:,:),cnres) contour(2) = gsn_contour(wks,cfile->Z(2,3,:,:),cnres) contour(3) = gsn_contour(wks,cfile->Z(3,3,:,:),cnres) ; ; Turn on a common labelbar, and panel the plots. ; panelres = True panelres@gsnPanelLabelBar = True panelres@lbLabelStride = 2 gsn_panel(wks,contour,(/2,2/),panelres) endgsn_labelbar_ndc.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_labelbar_ndc") ; Open a workstation. labels = (/"1 meter","2 meters","3 meters","4 meters","5 meters"/) lbres = True ; Indicate you want to set some resources. lbres@lbPerimOn = False ; Turn off labelbar perimeter. lbres@lbLabelFont = "helvetica" ; Change font to helvetica. gsn_labelbar_ndc(wks,5,labels,0.2,0.8,lbres) ; Draw labelbar. frame(wks) ; Advance frame. endgsn_logcon1.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create some dummy data for the contour plot. ; N=25 T = new((/N,N/),float) jspn = ispan(-N/2,N/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) wks = gsn_open_wks("x11","gsn_logcon1") ; Open an X11 workstation. cnres = True cnres@sfYCStartV = 10 cnres@sfYCEndV = 1000 cnres@tiXAxisString = "linear" ; Label for X axis. cnres@tiYAxisString = "linear" ; Label for Y axis. contour = gsn_contour(wks,T,cnres) ; Create and draw contour plot. cnres@tiYAxisString = "log" ; Label for Y axis. cnres@trYLog = True ; Log scaling for Y axis contour = gsn_contour(wks,T,cnres) ; Create and draw contour plot. endgsn_logcon2.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create some dummy data for the contour plot. ; N=25 T = new((/N,N/),float) jspn = ispan(-N/2,N/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) wks = gsn_open_wks("x11","gsn_logcon2") ; Open an X11 workstation. ; ; Create some dummy data for the Y axis that is NOT regularly spaced. ; y = (/ 10, 50, 100, 150, 250, 500, 750, 1000, 1100, 1300, 1500, \ 1750, 2000, 2200, 2400, 2600, 3000, 4000, 4500, 5000, 5100, 5500, \ 7000, 9000,10000/) cnres = True cnres@sfYArray = y cnres@tiXAxisString = "linear" ; Label for X axis. cnres@tiYAxisString = "irregularly spaced" ; Label for Y axis. contour = gsn_contour(wks,T,cnres) ; Create and draw contour plot. cnres@gsnYAxisIrregular2Log = True ; Force irregular axis to be log. cnres@tiYAxisString = "log" ; Label for Y axis. contour = gsn_contour(wks,T,cnres) ; Create and draw contour plot. endgsn_logxy.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create dummy data for XY plot. ; y = (/10, 100, 5000, 10, 9000, 70, 300, 10000, 600/) x = ispan(1,dimsizes(y),1) wks = gsn_open_wks("x11","missxy") ; Open an X11 workstation. xyres = True xyres@tiXAxisString = "linear" xyres@tiYAxisString = "linear" xyplot = gsn_xy(wks,x,y,xyres) ; Create and draw the XY plot. ; ; Change the Y axis scale to be log and redraw the plot. ; xyres@trYLog = True xyres@tiYAxisString = "log" xyres@xyComputeYMin = True ; To keep from getting some warning msgs. xyplot = gsn_xy(wks,x,y,xyres) ; Create and draw the XY plot. endgsn_map.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_map") ; Open a workstation. mpres = True ; Indicate you want to set some resources. mpres@mpFillOn = True ; Turn on map fill. mpres@mpGridMaskMode = "MaskLand" ; Mask grid lines over land. mpres@mpFillColors = (/0,14,28,14/) ; Fill land gray, ocean/lakes blue. map = gsn_map(wks,"Orthographic",mpres) ; Draw a filled map. endgsn_map2.ncl:
; ; This example shows how to create a polar stereographic plot with ; the lat/lon grid labeled. ; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "gsn_csm.ncl" begin wks = gsn_open_wks("ncgm","gsn_map2") mpres = True mpres@mpCenterLonF = -90.0 ; Change center of projection mpres@vpXF = 0.10 ; Change the location and mpres@vpYF = 0.90 ; the width and height mpres@vpWidthF = 0.78 ; of the map. mpres@vpHeightF = 0.78 mpres@gsnPolar = "NH" map = gsn_csm_map_polar(wks,mpres) endgsn_merge_colormaps.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("ncgm","gsn_merge_colormaps") ; ; Merge two pre-defined colormaps; ; gsn_merge_colormaps(wks,"rainbow","gsdtol") gsn_draw_colormap(wks) ; ; Generate grayscale color map. ; gcmap = new((/11,3/),float) gcmap(:,0) = ispan(0,10,1)/10. gcmap(:,1) = gcmap(:,0) gcmap(:,2) = gcmap(:,0) ; ; Append grayscale map to the end of a Blue-White-Red color map. ; gsn_merge_colormaps(wks,"BlWhRe",gcmap) gsn_draw_colormap(wks) endgsn_misscon.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create some dummy data for the contour plot. ; T = (/ (/ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 /),\ (/ 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7 /),\ (/ 7, 5, 999, 999, 999, 999, 999, 999, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 3, 3, 3, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 2, 2, 2, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 2, 1, 2, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 2, 2, 2, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 3, 3, 3, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 999, 999, 999, 999, 999, 999, 5, 7 /),\ (/ 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7 /),\ (/ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 /)/) T@_FillValue = 999 ; Set _FillValue. wks = gsn_open_wks("x11","misscon") ; Open an X11 workstation. contour = gsn_contour(wks,T,False) ; Draw a contour plot. endgsn_missxy.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","missxy") ; Open an X11 workstation. y = (/1,3,-1,-2,0,2,3,0,5,-2,1,0,0,8,10,5,-3/) y@_FillValue = 0 ; Set the missing value. x = ispan(0,dimsizes(y)-1,1) ; Generate some x values. xy = gsn_xy(wks,x,y,False) ; Create and draw an XY plot. endgsn_open_wks.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_open_wks") ; Open a X11 window. gsn_text_ndc(wks,":F21:Nothing too exciting here",0.5,0.5,False) ; Draw text. frame(wks) ; Advance frame endgsn_overlay1.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create some data for the contour plot. ; M=25 N=25 T = new((/N,M/),float) jspn = ispan(-M/2,M/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) wks = gsn_open_wks("x11","gsn_overlay1") ; Open an X11 workstation. cnres = True cnres@sfXCStartV = -90.0 ; minimum longitude value for overlay cnres@sfXCEndV = 90.0 ; maximum longitude value for overlay cnres@sfYCStartV = -45.0 ; minimum latitude value for overlay cnres@sfYCEndV = 45.0 ; maximum latitude value for overlay contour_map = gsn_contour_map(wks,T,cnres) ; Draw contour over map. endgsn_overlay2.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Create some data for the contour plot. ; M=25 N=25 T = new((/N,M/),float) jspn = ispan(-M/2,M/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) wks = gsn_open_wks("x11","gsn_overlay2") ; Open an X11 workstation. mpres = True mpres@gsnFrame = False ; Don't advance the frame when map is drawn. map = gsn_map(wks,"CylindricalEquidistant",mpres) ; Draw map. ; ; Retrieve the viewport coordinates used in the map plot so they ; can be used in the contour plot. ; getvalues map "vpXF" : xpos "vpYF" : ypos "vpWidthF" : width "vpHeightF" : height end getvalues ; ; Create a Contour plot using the same viewport coordinates as ; the map plot. ; cnres = True cnres@vpXF = xpos cnres@vpYF = ypos cnres@vpWidthF = width cnres@vpHeightF = height contour = gsn_contour(wks,T,cnres) endgsn_panel.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ncfile = addfile("$NCARG_ROOT/lib/ncarg/data/cdf/meccatemp.cdf","r") wks = gsn_open_wks("x11","panel") ; Open a workstation. cn_plots = new(6,graphic) ; Create variable to hold plots. cnres = True ; Set some resources. cnres@gsnFrame = False ; Turn off call to frame and draw cnres@gsnDraw = False ; since gsn_panel will do this. cnres@sfXCStartV = ncfile->lon(0) cnres@sfXCEndV = ncfile->lon(dimsizes(ncfile->lon)-1) cnres@sfYCStartV = ncfile->lat(0) cnres@sfYCEndV = ncfile->lat(dimsizes(ncfile->lat)-1) do i=1,6 cnres@tiMainString = ":F26:January Global Surface Temperature - Day " + i cn_plots(i-1) = gsn_contour(wks,ncfile->t(i-1,:,:),cnres) end do gsn_panel(wks,cn_plots,(/2,3/),False) ; 2 rows, 3 columns of plots. endgsn_polygon.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_polygon") ; Open a workstation. x = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./) ; Define X and Y arrays y = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./) ; for XY plot. xyres = True ; Indicate you want to set some resources. xyres@gsnFrame = False ; Don't advance frame after plot is drawn. xy = gsn_xy(wks,x,y,xyres) ; Draw XY plot. cirx = (/ 4.15, 3.26, 2.25, 1.59, 1.59, 2.25, 3.26, 4.15, 4.50/) ciry = (/ 8.46, 8.98, 8.80, 8.01, 6.99, 6.20, 6.02, 6.54, 7.50/) gsres = True ; Indicate you want to set some resources. gsres@gsFillColor = 4 ; Change fill color. gsn_polygon(wks,xy,cirx,ciry,gsres) ; Draw a filled polygon on the XY plot. frame(wks) ; Advance the frame. endgsn_polygon_ndc.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_polygon_ndc") ; Open a workstation. cirx = (/ .415, .326, .225, .159, .159, .225, .326, .415, .450/) ciry = (/ .846, .898, .880, .801, .699, .620, .602, .654, .750/) gsres = True ; Indicate you want to set some resources. gsres@gsFillColor = 4 ; Change fill color. gsn_polygon_ndc(wks,cirx,ciry,gsres) ; Draw a filled polygon. frame(wks) ; Advance the frame. endgsn_polymarker.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_polymarker") ; Open a workstation. x = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./) ; Define X and Y arrays y = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./) ; for XY plot. xyres = True ; Indicate you want to set some resources. xyres@gsnFrame = False ; Don't advance frame after plot is drawn. xy = gsn_xy(wks,x,y,xyres) ; Draw XY plot. markx = (/ 4.15, 3.26, 2.25, 1.59, 1.59, 2.25, 3.26, 4.15, 4.50/) marky = (/ 8.46, 8.98, 8.80, 8.01, 6.99, 6.20, 6.02, 6.54, 7.50/) gsres = True ; Indicate you want to set some resources. gsres@gsMarkerColor = 3 ; Change marker color. gsres@gsMarkerSizeF = 10. ; Increase marker size by a factor of 10. gsn_polymarker(wks,xy,markx,marky,gsres) ; Draw the polymarkers on ; the XY plot. gsres@gsMarkerColor = 18 ; Change marker color. gsres@gsMarkerIndex = 16 ; Change marker type to a filled circle. gsn_polymarker(wks,xy,markx+4,marky-4,gsres) ; Draw the polymarkers on ; the XY plot. frame(wks) ; Advance the frame. endgsn_polymarker_ndc.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("ncgm","gsn_polymarker_ndc") ; Open a workstation. markx = (/ .415, .326, .225, .159, .159, .225, .326, .415, .450/) marky = (/ .846, .898, .880, .801, .699, .620, .602, .654, .750/) gsres = True ; Indicate you want to set some resources. gsres@gsMarkerColor = 3 ; Change marker color. gsres@gsMarkerSizeF = 10. ; Increase marker size by a factor of 10. gsn_polymarker_ndc(wks,markx,marky,gsres) ; Draw the polymarkers. gsres@gsMarkerColor = 18 ; Change marker color. gsres@gsMarkerIndex = 16 ; Change marker type to a filled circle. gsn_polymarker_ndc(wks,markx+.4,marky-.4,gsres) ; Draw the polymarkers. frame(wks) ; Advance the frame. endgsn_ps.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin type = "ps" type@wkDeviceLowerX = -75 ; These coordinates can be negative. type@wkDeviceLowerY = -50 type@wkDeviceUpperX = 750 type@wkDeviceUpperY = 950 wks = gsn_open_wks(type,"gsn_ps") ; ; Create the default TickMark object. There is no GSUN equivalent for ; just creating a tickmark object, so use the regular NCL way here. ; tmid = create "ticks" tickMarkClass wks end create draw(tmid) ; Draw the TickMark object. frame(wks) ; Advance the frame. endgsn_retrieve_colormap.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("ncgm","colors") cmap = gsn_retrieve_colormap(wks) print(cmap) endgsn_stream.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Generate streamline data arrays. ; M=30 N=30 PI=3.14159 U = 10.0 * sin(onedtond((2.0 * PI / N) * ispan(0,N-1,1),(/M,N/))) V = 10.0 * cos(onedtond((2.0 * PI / M) * ispan(0,M-1,1),(/N,M/))) wks = gsn_open_wks("x11","gsn_stream") ; Open an X11 workstation. stres = True stres@vfXCStartV = -90.0 ; minimum longitude value for overlay stres@vfXCEndV = 90.0 ; maximum longitude value for overlay stres@vfYCStartV = -45.0 ; minimum latitude value for overlay stres@vfYCEndV = 45.0 ; maximum latitude value for overlay stream = gsn_streamline_map(wks,U,V,stres) ; Draw streamlines over a map. endgsn_vector.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Generate vector data arrays. ; M=30 N=30 PI=3.14159 U = 10.0 * sin(onedtond((2.0 * PI / N) * ispan(0,N-1,1),(/M,N/))) V = 10.0 * cos(onedtond((2.0 * PI / M) * ispan(0,M-1,1),(/N,M/))) wks = gsn_open_wks("x11","gsn_vector") ; Open an X11 workstation. vcres = True vcres@vfXCStartV = -90.0 ; minimum longitude value for overlay vcres@vfXCEndV = 90.0 ; maximum longitude value for overlay vcres@vfYCStartV = -45.0 ; minimum latitude value for overlay vcres@vfYCEndV = 45.0 ; maximum latitude value for overlay vector = gsn_vector_map(wks,U,V,vcres) ; Draw vectors over a map. endgsn_xyplot1.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_xyplot1") ; Open an X11 workstation. y = (/1,3,-1,-2,0,2,3/) x = ispan(0,dimsizes(y)-1,1) xyres = True xyres@xyLineColor = 3 ; Change the line color to color index 3 ; (default is 1, the foreground color). xyres@xyLineThicknessF = 4.0 ; Quadruple the line thickness. xyres@xyDashPattern = 2 ; Change the line to a dash pattern (default ; is 0, a solid line). xy = gsn_xy(wks,x,y,xyres) endgsn_xyplot2.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("x11","gsn_xyplot2") ; Open an X11 workstation. ; ; Create four data sets. ; y = new((/4,21/),float) x = ispan(0,20,1) pi4 = 3.14159/4. do i=0,3 y(i,:) = i + sin(x*pi4) end do xyres = True xyres@xyLineColors = (/1,2,3,4/) ; Change the line color and xyres@xyLineThicknesses = (/1.,2.,3.,4./) ; thickness for each line. xy = gsn_xy(wks,x,y,xyres) endhsv2rgb.ncl:
function hsv2rgb (h[*]:float,s[*]:float,v[*]:float) begin ; This procedure converts between HSV and RGB color space ; Input: h [0.0-360.0], s [0.0-1.0], v [0.0-1.0] ; Output: r [0.0-1.0], g [0.0-1.0], b [0.0-1.0] r_g_b = new((/3,dimsizes(h)/),float) r_g_b!0 = "rgb" r_g_b!1 = "cmap_len" if (any((s .eq. 0.0).and.(h.eq.0.0.or.h.eq.360))) then indexs = ind((h.eq.0.0.or.h.eq.360).and.s.eq.0.0) r_g_b(:,indexs) = (/v(indexs),v(indexs),v(indexs)/) delete(indexs) end if f = new(dimsizes(h),float) p = new(dimsizes(h),float) q = new(dimsizes(h),float) t = new(dimsizes(h),float) i = new(dimsizes(h),integer) if any(h.eq.360.0) h(ind(h.eq.360.0)) = 0.0 end if h = h/60.0 i = floattoint(floor(h)) f = h - i p = v*(1.0 - s) q = v*(1.0 - (s*f)) t = v*(1.0 - (s*(1.0 - f))) if any(i.eq.0) then indexs = ind(i.eq.0) r_g_b(:,indexs) = (/v(indexs),t(indexs),p(indexs)/) delete(indexs) end if if any(i.eq.1) then indexs = ind(i.eq.1) r_g_b(:,indexs) = (/q(indexs),v(indexs),p(indexs)/) delete(indexs) end if if any(i.eq.2) then indexs = ind(i.eq.2) r_g_b(:,indexs) = (/p(indexs),v(indexs),t(indexs)/) delete(indexs) end if if any(i.eq.3) then indexs = ind(i.eq.3) r_g_b(:,indexs) = (/p(indexs),q(indexs),v(indexs)/) delete(indexs) end if if any(i.eq.4) then indexs = ind(i.eq.4) r_g_b(:,indexs) = (/t(indexs),p(indexs),v(indexs)/) delete(indexs) end if if any(i.eq.5) then indexs = ind(i.eq.5) r_g_b(:,indexs) = (/v(indexs),p(indexs),q(indexs)/) delete(indexs) end if if(any(ismissing(r_g_b))) print("WARNING: Some invalid HSV values were passed to hsv2rgb") end if return(r_g_b(cmap_len|:,rgb|:)) endlabelbar.ncl:
load "hsv2rgb.ncl" begin ; ; Open NetCDF file containing Geo-Potential height forecast ; information. ; filedir = ncargpath("data") filename = filedir + "/cdf/contour.cdf" cfile = addfile(filename,"r") ; ; Set the color map. ; ncolors = 13 hue = fspan(0.,300.,ncolors) ; Set hue range. sat = fspan(1.0,1.0,ncolors) ; Set saturation range. val = fspan(0.8,0.8,ncolors) ; Set value range. cmap = new((/ncolors+2,3/),float) ; Define (ncolors+2) x 3 float ; array to hold the color map. cmap(0,:) = (/1.,1.,1./) ; Set the background to white. cmap(1,:) = (/0.,0.,0./) ; Set the foreground to black. cmap(2:ncolors+1,:) = hsv2rgb(hue,sat,val) ; Generate smooth range of ; RGB values. ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp "wkColorMap" : cmap end create field = create "field" scalarFieldClass defaultapp "sfDataArray" : cfile->Z(0,3,:,:) "sfMissingValueV" : cfile->Z@_FillValue ; Set missing value. end create xpos = (/0.12, 0.57, 0.12, 0.57/) ; X and Y positions of ypos = (/0.95, 0.95, 0.53, 0.53/) ; the four contour plots. ; ; Create a contour object. ; cnid = create "contour" contourPlotClass wid "vpWidthF" : 0.35 "vpHeightF" : 0.35 "vpXF" : xpos(0) "vpYF" : ypos(0) "cnScalarFieldData" : field "cnLevelSelectionMode" : "ManualLevels" ; Manually select our "cnMinLevelValF" : 5400.0 ; own contour levels by "cnMaxLevelValF" : 5950.0 ; specifying min, max, "cnLevelSpacingF" : 50.0 ; and spacing. "cnFillOn" : True ; Turn on fill. "cnLineLabelsOn" : False ; Turn off line labels. "cnInfoLabelOn" : False ; Turn off info label. "cnLowLabelsOn" : False ; Turn off low label. "cnHighLabelsOn" : False ; Turn off high label. end create draw(cnid) ; Draw contour plot. ; ; Loop through three more time steps and create and draw ; contour plots at each one. ; do i=1,3 setvalues field "sfDataArray" : cfile->Z(i,3,:,:) ; Select new time step. end setvalues setvalues cnid "vpXF" : xpos(i) ; Change X and Y positions "vpYF" : ypos(i) ; of the new contour plot. end setvalues draw(cnid) ; Draw the new contour plot. end do ; ; Retrieve the contour levels and the colors used for filling the ; contours so we can use this information in a labelbar. ; getvalues cnid "cnLevels" : levels "cnFillColors" : colors end getvalues ; ; Create a labelbar. ; lbid = create "labelbar" labelBarClass wid "vpXF" : 0.25 ; Specify position of labelbar "vpYF" : 0.13 ; in the viewport. "vpWidthF" : 0.50 "vpHeightF" : 0.10 "lbPerimOn" : False ; Turn off perimeter. "lbBoxCount" : dimsizes(levels)+1 ; # of labelbar boxes. "lbOrientation" : "Horizontal" ; Default is vertical. "lbLabelAlignment" : "InteriorEdges" ; Default is "BoxCenters". "lbLabelStrings" : levels ; Labels for boxes. "lbFillColors" : colors ; Colors for boxes. "lbMonoFillPattern" : True ; Fill them all solid. end create draw(lbid) ; Draw the labelbar. frame(wid) ; Advance the frame. endlblbar.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ncolors = 16 ; Plus two colors for background and foreground. hmin = 225. ; hue min hmax = 360. ; hue max smin = 0.67 ; saturation min smax = 0.67 ; saturation max vmin = 1.0 ; value (intensity) min vmax = 1.0 ; value max hue = fspan(hmin,hmax,ncolors) sat = fspan(smin,smax,ncolors) val = fspan(vmin,vmax,ncolors) cmap = new((/ncolors+2,3/),float) cmap(0,:) = (/1.,1.,1./) ; white cmap(1,:) = (/0.,0.,0./) ; black cmap(2:ncolors+1,:) = hsv2rgb(hue,sat,val) wks = gsn_open_wks("x11","example") ; Open an X11 window. gsn_define_colormap(wks,cmap) ; Set the new colormap. lbres = True lbres@lbAutoManage = False lbres@lbFillColors = ispan(0,ncolors+1,1) lbres@lbLabelFontHeightF = 0.02 lbres@lbMonoFillPattern = True lbres@lbOrientation = "Horizontal" lbres@lbPerimOn = False lbres@vpHeightF = 0.40 lbres@vpWidthF = 0.98 lbstrings = ":F26:" + ispan(0,ncolors+1,1) ; Labels for labelbar. gsn_labelbar_ndc(wks,ncolors+2,lbstrings,0.01,0.98,lbres) ; Draw a ; labelbar. ; ; Title at the bottom. ; textres = True textres@txFontHeightF = 0.03 gsn_text_ndc(wks,":F26:color indices",.5,.64,textres) frame(wks) ; Advance frame. endlogcon1.ncl:
begin ; ; Create some dummy data for the contour plot. ; N=25 T = new((/N,N/),float) jspn = ispan(-N/2,N/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. Change the min and max of the Y axes to be ; 10 and 10000 instead of 0 and N-1 (the default), because you can't take ; the log of 0. ; dataid = create "data" scalarFieldClass defaultapp "sfDataArray" : T ; Contour data. "sfYCStartV" : 10 ; Min value for Y axis. "sfYCEndV" : 10000 ; Max value for Y axis. end create ; ; Create a ContourPlot object and draw it to show what a linear X and ; Y axis looks like. ; cnid = create "ContourPlot" contourPlotClass wid "cnScalarFieldData" : dataid "tiXAxisString" : "linear" ; Label for X axis. "tiYAxisString" : "linear" ; Label for Y axis. end create draw(cnid) ; Draw the contour plot. frame(wid) ; Advance the frame. ; ; Now set trYLog to True to indicate the Y axis should be log. ; setvalues cnid "tiYAxisString" : "log" ; Label for Y axis. "trYLog" : True ; Log scaling for Y axis end setvalues draw(cnid) ; Draw the contour plot. frame(wid) ; Advance the frame. endlogcon2.ncl:
begin ; ; Create some dummy data for the contour plot. ; N=25 T = new((/N,N/),float) jspn = ispan(-N/2,N/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create some dummy data for the Y axis that is NOT regularly spaced. ; y = (/ 10, 50, 100, 150, 250, 500, 750, 1000, 1100, 1300, 1500, \ 1750, 2000, 2200, 2400, 2600, 3000, 4000, 4500, 5000, 5100, 5500, \ 7000, 9000,10000/) ; ; Create a data object with irregularly spaced data for the Y ; axis. Whenever you set the sfYArray or sfXarray resource, this signals ; that that particular axis is now irregularly spaced, regardless of ; whether the data used for these resources is irregularly spaced. ; dataid = create "data" scalarFieldClass defaultapp "sfDataArray" : T ; Contour data. "sfYArray" : y ; Coordinates for Y axis. end create ; ; Create a ContourPlot object and draw it to show what the plot ; looks like with a linear X axis and an irregular Y axis. ; cnid = create "ContourPlot" contourPlotClass wid "cnScalarFieldData" : dataid "tiXAxisString" : "linear" ; Label for X axis. "tiYAxisString" : "irregularly spaced" ; Label for Y axis. end create draw(cnid) ; Draw plot. frame(wid) ; Advance frame. ; ; Create a LogLin plot in which the ContourPlot will be overlaid in ; order to get the irregular Y axis in log scaling. This is the only ; way you can currently get an irregularly spaced axis to be in log ; coordinates. ; llid = create "loglin" logLinPlotClass wid "trXMinF" : 0. ; Set the min and max for "trXMaxF" : N-1 ; the X axis. "trYMinF" : min(y) ; Set the min and max for "trYMaxF" : max(y) ; the Y axis. "trYLog" : True ; Set the Y axis to be log. end create setvalues cnid "tiYAxisString" : "log" ; Change label for Y axis. end setvalues ; ; By overlaying the ContourPlot on this LogLinPlot, the ContourPlot ; will be transformed to the coordinates of the LogLinPlot; that is, ; the Y axis will be in log scaling. ; overlay(llid,cnid) draw(llid) ; Draw the LogLinPlot, which will include the ContourPlot. frame(wid) ; Advance the frame. endlogxy.ncl:
begin ; ; Create dummy data for XY plot. ; y = (/10, 100, 5000, 10, 9000, 70, 300, 10000, 600/) wid = create "wks" xWorkstationClass defaultapp end create ; ; Create the data object. ; dataid = create "data" coordArraysClass defaultapp "caYArray": y end create ; ; Create and draw an XyPlot with linear scaling. ; xyid = create "plot" xyPlotClass wid "xyCoordData" : dataid "tiXAxisString" : "linear" ; Label for X axis. "tiYAxisString" : "linear" ; Label for Y axis. end create draw(xyid) ; Draw the XY plot. frame(wid) ; Advance the frame. ; ; Change the Y axis scale to be log and redraw the plot. ; setvalues xyid "trYLog" : True ; Set Y axis to log. "tiYAxisString" : "log" ; Change label for Y axis. end setvalues draw(xyid) ; Draw the XY plot. frame(wid) ; Advance the frame. endmap1.ncl:
begin ; ; Create an X workstation to draw on. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create the default map plot. ; mapid = create "map" mapPlotClass wid end create ; ; Draw the map. ; draw(mapid) ; ; Retrieve the view port coordinates of the map so you can draw the tick ; marks in the exact same location. ; getvalues mapid "vpXF" : vpx "vpYF" : vpy "vpWidthF" : vpwidth "vpHeightF" : vpheight end getvalues ; ; Create a TickMark object. ; tmid = create "tickmarks" tickMarkClass wid "vpXF" : vpx ; Set the viewport location of the "vpYF" : vpy ; tick marks to be the same as "vpWidthF" : vpwidth ; the map. "vpHeightF" : vpheight "tmYLDataBottomF" : -90.0 ; The default map projection goes "tmYLDataTopF" : 90.0 ; from -90,90 latitude and -180,180 "tmXBDataLeftF" : -180.0 ; longitude, so use these same "tmXBDataRightF" : 180.0 ; values for the tick marks. "tmXBLabelFont" : 22 ; Change the font and size of the "tmXBLabelFontHeightF" : 0.015 ; bottom tick mark labels. "tmXBMode" : "Explicit" ; Set the tick mark labeling mode ; to "explicit" so that you can ; explicitly define where you want ; tickmarks and their labels with ; the resources "tmXBValues" and ; "tmXBLabels." "tmXBValues" : (/-180., -120., -60., 0., 60., 120., 180./) "tmXBLabels" : (/"180W","120W","60W","0","60E","120E","180E"/) "tmYLLabelFont" : 22 ; Change the font and size of the "tmYLLabelFontHeightF" : 0.015 ; left tick mark labels. "tmYLMode" : "Explicit" "tmYLValues" : (/-90., -60., -30., 0., 30., 60., 90./) "tmYLLabels" : (/"90S","60S","30S","0","30N","60N","90N"/) end create ; ; Draw the TickMark object. ; draw(tmid) ; ; Advance the frame. ; frame(wid) endmap2.ncl:
; ; This example shows how to create a polar stereographic plot with ; the lat/lon grid labeled. ; begin ; ; Create an X workstation to draw on. ; wid = create "map" xWorkstationClass defaultapp end create ; ; Create a polar stereographic map. ; mpid = create "mapplot" mapPlotClass wid "vpXF" : 0.10 ; Change the location and "vpYF" : 0.90 ; the width and height "vpWidthF" : 0.78 ; of the map. "vpHeightF" : 0.78 "mpProjection" : "Stereographic" "mpCenterLatF" : 90.0 ; Change the center of "mpCenterLonF" : -90.0 ; the projection. "mpEllipticalBoundary" : True ; Here's what makes it elliptical. "mpLimitMode" : "LatLon" ; Change the map limit mode "mpMinLatF" : 0.0 ; so that only the northern "mpMaxLatF" : 90.0 ; hemisphere is visible. "mpMinLonF" : -180.0 "mpMaxLonF" : 180.0 end create ; ; Draw the map. ; draw(mpid) ; ; Change the viewport of the map object we just created to generate a ; new data space for lat/lon text. Make the new viewport slightly larger ; than the one the map was drawn in, because we want to draw the ; labels on the outside of the map. ; setvalues mpid "vpXF" : 0.07 "vpYF" : 0.93 "vpWidthF" : 0.84 "vpHeightF" : 0.84 end setvalues ; ; Create a generic TextItem object that we'll use to label the lat/lon ; grid. ; txid = create "text" textItemClass wid "txFont" : 22 ; Change the font to 22 (helvetica). "txFontHeightF" : 0.015 ; Change the size of the font. end create ; ; Define an array of strings to label the longitude values. ; labels = (/"0","30E","60E","90E","120E","150E","180","150W",\ "120W","90W","60W","30W"/) ; ; Create the lat/lon coordinates where you want labels to appear. ; In this case, we want the labels to appear at the equator (lat=0), ; and at longitude values of 0, 30, 60, ..., 330. ; lat = fspan(0.,0.,12) lon = fspan(0.,330.,12) ; ; Create arrays to hold the NDC values that we're going to convert ; the lat/lon values to. ; xndc = new(dimsizes(lon),float) yndc = new(dimsizes(lat),float) ; ; Convert lat/lon coordinates to NDC coordinates since we are ; drawing the labels in NDC space and NOT in lat/lon space. ; datatondc(mpid,lon,lat,xndc,yndc) ; ; Draw each string. ; do i=0,dimsizes(labels)-1 setvalues txid "txString" : labels(i) "txPosXF" : xndc(i) "txPosYF" : yndc(i) end setvalues draw(txid) end do ; ; Advance the frame. ; frame(wid) endmetafile.ncl:
begin ; ; Create an NCGM Workstation and change the name of the metafile to ; "plot.ncgm." ; wks = create "wks" ncgmWorkstationClass defaultapp "wkMetaName" : "plot.ncgm" end create mapid = create "map" mapPlotClass wks end create ; Create a map object. draw(mapid) ; Draw the map plot. frame(wks) ; Advance the frame. endmisscon.ncl:
begin ; ; Create some dummy data for the contour plot. ; T = (/ (/ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 /),\ (/ 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7 /),\ (/ 7, 5, 999, 999, 999, 999, 999, 999, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 3, 3, 3, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 2, 2, 2, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 2, 1, 2, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 2, 2, 2, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 3, 3, 3, 3, 3, 999, 5, 7 /),\ (/ 7, 5, 999, 999, 999, 999, 999, 999, 999, 5, 7 /),\ (/ 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7 /),\ (/ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 /)/) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" scalarFieldClass defaultapp "sfDataArray" : T "sfMissingValueV" : 999 ; Indicate that 999 is a missing value ; and thus shouldn't be plotted. end create ; ; Create a ContourPlot object. ; cnid = create "ContourPlot" contourPlotClass wid "cnScalarFieldData" : dataid end create draw(cnid) ; Draw contour plot. frame(wid) ; Advance frame. endmissxy.ncl:
begin ; ; Create an X Workstation. ; wks = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" coordArraysClass defaultapp "caYArray" : (/1,3,-1,-2,0,2,3,0,5,-2,1,0,0,8,10,5,-3/) "caYMissingV" : 0 ; Indicate that 0 is a missing value and thus ; shouldn't be plotted. end create ; ; Create an XY plot. ; xy = create "xyplot" xyPlotClass wks "xyCoordData" : dataid end create draw(xy) ; Draw the XY plot. frame(wks) ; Advance the frame. endmultiple.ncl:
begin ; ; Define four dummy data sets (for four XY plots). ; npts = 101 y = new((/4,npts/),float) y(0,:) = sin(3.14159*fspan(0.,20.,npts)/2.) y(1,:) = sin(3.14159*fspan(0.,20.,npts)/4.) y(2,:) = sin(3.14159*fspan(0.,20.,npts)/8.) y(3,:) = sin(3.14159*fspan(0.,20.,npts)/16.) ; ; Define the X and Y positions in the viewport of each XY plot. ; (0.,0.) represents the lower left corner and (1.,1.) represents ; the upper right corner of the viewport. The (x,y) position that you ; specify is the position for the upper left corner of the plot, so ; a position of (0.10,0.90) will place the upper left corner of the plot ; in the upper left corner of the viewport. A position of (0.60,0.45) ; will place the upper left corner of the plot at roughly the middle of ; the viewport (slightly below and to the right of the middle). ; xpos = (/0.10, 0.60, 0.10, 0.60/) ypos = (/0.90, 0.90, 0.45, 0.45/) ; ; Create an X workstation. ; wid = create "xyplots" xWorkstationClass defaultapp end create ; ; Create arrays to hold the data and plot objects. ; dataid = new(4,graphic) plotid = new(4,graphic) ; ; Loop through the four plots, create each one, and draw it. ; do i = 0,3 dataid(i) = create "data" coordArraysClass defaultapp "caYArray": y(i,:) end create plotid(i) = create "plot" xyPlotClass wid "vpXF" : xpos(i) "vpYF" : ypos(i) "vpWidthF" : 0.35 ; The width and height is the same for "vpHeightF" : 0.35 ; each plot. "xyCoordData" : dataid(i) "tiMainString" : "Plot " + i + " (" + xpos(i) + "," + ypos(i) + ")" end create draw(plotid(i)) end do ; ; Advance the frame. ; frame(wid) endoverlay1.ncl:
begin ; ; Create some data for the contour plot. ; M=25 N=25 T = new((/N,M/),float) jspn = ispan(-M/2,M/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" scalarFieldClass defaultapp "sfDataArray" : T "sfXCStartV" : -90.0 ; minimum longitude value for overlay "sfXCEndV" : 90.0 ; maximum longitude value for overlay "sfYCStartV" : -45.0 ; minimum latitude value for overlay "sfYCEndV" : 45.0 ; maximum latitude value for overlay end create ; ; Create a ContourPlot object. ; cnid = create "ContourPlot" contourPlotClass wid "cnScalarFieldData" : dataid end create ; ; Create the default MapPlot object. ; mpid = create "MapPlot" mapPlotClass wid end create overlay(mpid,cnid) ; Overlay contour plot on map plot. draw(mpid) ; Draw map plot (contour plot will be drawn too). frame(wid) ; Advance frame. endoverlay2.ncl:
begin ; ; Create some data for the contour plot. ; M=25 N=25 T = new((/N,M/),float) jspn = ispan(-M/2,M/2,1)^2 ispn = ispan(-N/2,N/2,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" scalarFieldClass defaultapp "sfDataArray" : T end create ; ; Create and draw a MapPlot object. ; mpid = create "MapPlot" mapPlotClass wid end create draw(mpid) ; Draw map plot. ; ; Retrieve the viewport coordinates used in the map plot so they ; can be used in the contour plot. ; getvalues mpid "vpXF" : xpos "vpYF" : ypos "vpWidthF" : width "vpHeightF" : height end getvalues ; ; Create a ContourPlot object using the same viewport coordinates as ; the map plot. ; cnid = create "ContourPlot" contourPlotClass wid "vpXF" : xpos "vpYF" : ypos "vpWidthF" : width "vpHeightF" : height "cnScalarFieldData" : dataid end create draw(cnid) ; Draw the contour plot. frame(wid) ; Advance frame. endpanel.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; ; Open a netCDF file containing storm data. ; tfile = addfile("$NCARG_ROOT/lib/ncarg/data/cdf/Tstorm.cdf","r") ; ; Get the temperature arrays for the first 6 time steps. ; nplots = 6 temp = tfile->t(0:nplots-1,:,:) ; ; Save the lat and lon arrays to a variable. ; lat = tfile->t&lat lon = tfile->t&lon lat@name = "latitude" ; Name the lat variable. lon@name = "longitude" ; Name the lon variable. wks = gsn_open_wks("x11","panel") ; Open an X11 workstation. ; ; Define a color map. ; cmap = (/(/1.00,1.00,1.00/),(/0.00,0.00,0.00/),(/1.00,.000,.000/),\ (/.950,.010,.000/),(/.870,.050,.000/),(/.800,.090,.000/),\ (/.700,.090,.000/),(/.700,.120,.000/),(/.700,.180,.000/),\ (/.700,.260,.000/),(/.700,.285,.000/),(/.680,.330,.000/),\ (/.570,.420,.000/),(/.560,.530,.000/),(/.550,.550,.000/),\ (/.130,.570,.000/),(/.060,.680,.000/),(/.000,.690,.000/),\ (/.000,.700,.100/),(/.000,.600,.300/),(/.000,.500,.500/),\ (/.000,.400,.700/),(/.000,.300,.700/),(/.000,.200,.700/),\ (/.000,.100,.700/),(/.000,.000,.700/),(/.100,.100,.700/),\ (/.200,.200,.700/),(/.300,.300,.700/),(/.420,.400,.700/),\ (/.560,.500,.700/),(/.610,.600,.700/),(/.700,.700,.700/)/) gsn_define_colormap(wks,cmap) ; ; The next set of resources will apply to all four plots. ; resources = True resources@gsnDraw = False ; Don't draw plot or advance the resources@gsnFrame = False ; frame after plot is created. ; ; Loop through four of the timesteps and create each plot. Title each ; plot according to which timestep it is. ; plot = new(nplots,graphic) do i=0,nplots-1 resources@tiMainString = "Temperature at time = " + i plot(i) = gsn_contour(wks,temp(i,:,:),resources) end do gsn_panel(wks,plot(0:3),(/2,2/),False) ; Draw 2 rows/2 columns of plots. ; ; This section will set resources for drawing contour plots ; over a map. ; delete(resources@tiMainString) ; Don't set a main title. resources@sfXArray = lon ; Portion of map on which to overlay resources@sfYArray = lat ; contour plot. resources@cnInfoLabelOn = False ; Turn off info label. resources@cnLineLabelsOn = False ; Turn off contour line labels. resources@cnLinesOn = False ; Turn off contour lines. resources@cnFillOn = True ; Turn on contour fill. resources@cnLevelSelectionMode = "ManualLevels" ; Select contour levels. resources@cnMinLevelValF = 245. resources@cnMaxLevelValF = 302.5 resources@cnLevelSpacingF = 2.5 resources@mpLimitMode = "LatLon" ; Limit portion of map that is viewed. resources@mpMinLatF = min(lat) resources@mpMaxLatF = max(lat) resources@mpMinLonF = min(lon) resources@mpMaxLonF = max(lon) resources@mpPerimOn = True ; Turn on map perimeter. resources@mpGridAndLimbOn = False ; Turn off map grid. do i=0,nplots-1 plot(i) = gsn_contour_map(wks,temp(i,:,:),resources) end do panelres = True panelres@gsnFrame = False ; Don't advance the frame. ; ; Set up some labelbar resources. Set gsnPanelLabelBar to True to ; indicate you want to draw a common labelbar at the bottom of the ; plots. Set gsnPanelFigureStrings to some strings you want to use ; to label the lower righthand corner of each plot. ; panelres@gsnPanelFigureStrings = (/"(a)","(b)","(c)","(d)","(e)","(f)"/) panelres@gsnPanelLabelBar = True panelres@lbLabelFont = "helvetica-bold" ; Labelbar font panelres@lbLabelStride = 2 ; Draw every other label panelres@lbLabelFontHeightF = 0.015 ; Labelbar font height panelres@vpHeightF = 0.15 ; Height of labelbar panelres@vpWidthF = 0.7 ; Width of labelbar gsn_panel(wks,plot,(/3,2/),panelres) ; Draw 3 rows and 2 columns of plots. ; ; Draw two titles at the top. ; textres = True textres@txFontHeightF = 0.025 ; Size of title. gsn_text_ndc(wks,":F26:Temperature (K) at every six hours",0.5,.97,textres) textres@txFontHeightF = 0.02 ; Make second title slightly smaller. gsn_text_ndc(wks,":F26:January 1996",0.5,.935,textres) frame(wks) ; Advance the frame. endpanel2.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin wks = gsn_open_wks("ncgm","panel") res = True res@gsnDraw = False res@gsnFrame = False res@mpGridAndLimbOn = False res@mpOutlineOn = False res@mpPerimOn = True res@mpPerimLineThicknessF = 2.0 map = new(10,graphic) map(0) = gsn_map(wks,"CylindricalEquidistant",res) do i=1,dimsizes(map)-1 map(i) = map(0) end do res = True res@gsnFrame = False gsn_panel(wks,map(0:5),(/3,2/),res) gsn_text_ndc(wks,":F21:dims = 3 x 2, 6 plots",0.5,0.95,False) gsn_text_ndc(wks,":F21:1",0.25,0.75,False) gsn_text_ndc(wks,":F21:2",0.75,0.75,False) gsn_text_ndc(wks,":F21:3",0.25,0.50,False) gsn_text_ndc(wks,":F21:4",0.75,0.50,False) gsn_text_ndc(wks,":F21:5",0.25,0.25,False) gsn_text_ndc(wks,":F21:6",0.75,0.25,False) frame(wks) gsn_panel(wks,map(0:5),(/2,3/),res) gsn_text_ndc(wks,":F21:dims = 2 x 3, 6 plots",0.5,0.95,False) gsn_text_ndc(wks,":F21:1",0.15,0.58,False) gsn_text_ndc(wks,":F21:2",0.50,0.58,False) gsn_text_ndc(wks,":F21:3",0.83,0.58,False) gsn_text_ndc(wks,":F21:4",0.15,0.42,False) gsn_text_ndc(wks,":F21:5",0.50,0.42,False) gsn_text_ndc(wks,":F21:6",0.83,0.42,False) frame(wks) gsn_panel(wks,map(0:4),(/3,2/),res) gsn_text_ndc(wks,":F21:dims = 3 x 2, 5 plots",0.5,0.95,False) gsn_text_ndc(wks,":F21:1",0.25,0.75,False) gsn_text_ndc(wks,":F21:2",0.75,0.75,False) gsn_text_ndc(wks,":F21:3",0.25,0.50,False) gsn_text_ndc(wks,":F21:4",0.75,0.50,False) gsn_text_ndc(wks,":F21:5",0.50,0.25,False) frame(wks) gsn_panel(wks,map(0:6),(/3,3/),res) gsn_text_ndc(wks,":F21:dims = 3 x 3, 7 plots",0.5,0.95,False) gsn_text_ndc(wks,":F21:1",0.15,0.67,False) gsn_text_ndc(wks,":F21:2",0.50,0.67,False) gsn_text_ndc(wks,":F21:3",0.83,0.67,False) gsn_text_ndc(wks,":F21:4",0.15,0.51,False) gsn_text_ndc(wks,":F21:5",0.50,0.51,False) gsn_text_ndc(wks,":F21:6",0.83,0.51,False) gsn_text_ndc(wks,":F21:7",0.50,0.34,False) frame(wks) gsn_panel(wks,map(0:7),(/3,3/),res) gsn_text_ndc(wks,":F21:dims = 3 x 3, 8 plots",0.5,0.95,False) gsn_text_ndc(wks,":F21:1",0.15,0.67,False) gsn_text_ndc(wks,":F21:2",0.50,0.67,False) gsn_text_ndc(wks,":F21:3",0.83,0.67,False) gsn_text_ndc(wks,":F21:4",0.15,0.51,False) gsn_text_ndc(wks,":F21:5",0.50,0.51,False) gsn_text_ndc(wks,":F21:6",0.83,0.51,False) gsn_text_ndc(wks,":F21:7",0.33,0.34,False) gsn_text_ndc(wks,":F21:8",0.67,0.34,False) frame(wks) res@gsnPanelRowSpec = True gsn_panel(wks,map(0:8),(/1,2,3,2,1/),res) txres = True txres@txFontHeightF = 0.025 gsn_text_ndc(wks,":F21:gsnPanelRowSpec=True, dims = (1,2,3,2,1), 9 plots",\ 0.5,0.95,txres) gsn_text_ndc(wks,":F21:1",0.50,0.85,False) gsn_text_ndc(wks,":F21:2",0.33,0.67,False) gsn_text_ndc(wks,":F21:3",0.67,0.67,False) gsn_text_ndc(wks,":F21:4",0.15,0.51,False) gsn_text_ndc(wks,":F21:5",0.50,0.51,False) gsn_text_ndc(wks,":F21:6",0.83,0.51,False) gsn_text_ndc(wks,":F21:7",0.33,0.34,False) gsn_text_ndc(wks,":F21:8",0.67,0.34,False) gsn_text_ndc(wks,":F21:9",0.50,0.17,False) frame(wks) endps.ncl:
begin ; ; Open a PostScript workstation. Note that the coordinates selected ; do not form a square, so the aspect ratio of the plot will also ; not be a square. ; wid = create "workstation" psWorkstationClass defaultapp "wkDeviceLowerX" : -75 ; These coordinates can be negative. "wkDeviceLowerY" : -50 "wkDeviceUpperX" : 750 "wkDeviceUpperY" : 950 end create ; ; Create the default TickMark object. ; tmid = create "ticks" tickMarkClass wid end create draw(tmid) ; Draw the TickMark object. frame(wid) ; Advance the frame. endreadasc.ncl:
begin ; ; Read an ASCII file. The file "oceanland30e.asc" contains a single ; column of integers, 16471 of them. The function "asciiread" allows ; you to specify the dimensionality of the data, and in this case we ; are passing dimensions (/91,181/), so "ocean1" will be a 2-dimensional ; array dimensioned 91 x 181, which can be verified by printing the ; dimsizes of "ocean1." ; filedir = ncargpath("data") ocean1 = asciiread(filedir + "/asc/oceanland30e.asc",(/91,181/),"integer") print(dimsizes(ocean1)) ; ; Write out part of "ocean1" to a new ASCII file. "data.asc" will contain ; 15 integers, since (7:3:2,0:4) is a 3 x 5 array. ; asciiwrite("data.asc",ocean1(7:3:2,0:4)) endreadnc.ncl:
begin ; ; Open netCDF file and print its contents. ; filedir = ncargpath("data") ncfilename = filedir + "/cdf/contour.cdf" netcdf_file = addfile(ncfilename,"r") print(netcdf_file) ; ; Open GRIB file and print its contents. ; grbfilename = filedir + "/grb/ced1.lf00.t00z.eta.grb" grib_file = addfile(grbfilename,"r") print(grib_file) ; ; Open a netCDF file called "data.nc" and write some of the GRIB contents ; to it. The "data.nc" file will contain variables "PRES," "HGT," ; "A_PCP," "NCPCP," "ACPCP," and "CAPE," which you can verify with: ; ; ncdump -h data.nc ; ncfile_out = addfile("data.nc","c") ncfile_out->PRES = grib_file->PRES_6_SFC ncfile_out->HGT = grib_file->HGT_6_SFC ncfile_out->A_PCP = grib_file->A_PCP_6_SFC_acc ncfile_out->NCPCP = grib_file->NCPCP_6_SFC_acc ncfile_out->ACPCP = grib_file->ACPCP_6_SFC_acc ncfile_out->CAPE = grib_file->CAPE_6_SFC endscale1.ncl:
begin ; ; Define a Y array to plot. ; y = (/2.0,0.9,2.2,4.3,3.9,4.6,4.8,4.8,4.6,3.5,3.9,2.5,2.0/) ; ; Define an array of randomly spaced pressure values. These are the ; values that we want to go on the right Y axis. ; pressure = (/1000, 925, 875, 800, 700, 575, 450, 350, 200, 175, 75, 50/) ; ; Create an X workstation. ; wid = create "xwid" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "xyData" coordArraysClass defaultapp "caYArray": y end create ; ; Create an XY plot. ; plotid = create "xyPlot" xyPlotClass wid "xyCoordData" : dataid "trYMinF" : min(y) ; Make sure the min/max of our Y axis "trYMaxF" : max(y) ; is the same as our data. "tmYUseLeft" : False ; Don't use tick marks on the right side ; that are used on left side. "tmYRMode" : "Explicit" ; Explicitly define where we want tick ; marks and what labels we want at them. ; ; Place the pressure values at equal intervals along the right Y axis. ; Note that the pressure values themselves are NOT equally spaced, but ; they will be placed at equal intervals on the axis. ; "tmYRValues" : fspan(min(y),max(y),dimsizes(pressure)) "tmYRLabels" : pressure "tmYRLabelsOn" : True ; We have to turn on labels for the right axes, ; otherwise they won't appear. end create draw(plotid) ; Draw the XY plot. ; ; Create a text item to label the left Y axis. ; txid = create "text" textItemClass wid "txPosXF" : 0.10 ; X pos. of text "txPosYF" : 0.50 ; Y pos. of text "txFontHeightF" : 0.02 ; Change the size of the font. "txAngleF" : 90.0 ; Rotate the text 90 deg. counter-clockwise. "txString" : "Height (km)" end create draw(txid) ; Draw the text item. ; ; Change some values of previous text item to create a new label for ; the right Y axis. ; setvalues txid "txPosXF" : 0.9 ; X pos. of text (use same Y position as before) "txAngleF" : -90.0 ; Rotate the text 90 deg. clockwise "txString" : "Pressure (mb)" end setvalues draw(txid) ; Draw the text item. frame(wid) ; Advance the frame endscale2.ncl:
begin ; ; Define a Y array to plot. ; y = (/2.0,0.9,2.2,4.3,3.9,4.6,4.8,4.8,4.6,3.5,3.9,2.5,2.0/) ; ; Define an array of randomly spaced pressure values. These are the ; values that we want to go on the right Y axis. ; pressure = (/1000, 925, 875, 800, 700, 575, 450, 350, 200, 175, 75, 50/) ; ; Create an X workstation. ; wid = create "xwid" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "xyData" coordArraysClass defaultapp "caYArray": y end create ; ; Create an XY plot. ; plotid = create "xyPlot" xyPlotClass wid "vpXF" : 0.20 ; Change the size and location of "vpYF" : 0.80 ; the XY plot in the viewport. "vpWidthF" : 0.60 "vpHeightF" : 0.60 "xyCoordData" : dataid "trYMinF" : min(y) ; Make sure the min/max of our Y axis "trYMaxF" : max(y) ; is the same as our data. "tmYROn" : False ; Turn off right Y axis tick marks. end create draw(plotid) ; Draw the XY plot. tmid = create "tickmarks" tickMarkClass wid "vpXF" : 0.20 ; Use the same size and location that "vpYF" : 0.80 ; was used for the XY plot. "vpWidthF" : 0.60 "vpHeightF" : 0.60 "tmXBDataLeftF" : 0.0 ; Set the min and max of "tmXBDataRightF" : dimsizes(y) -1 ; the bottom X axis. "tmYLDataBottomF" : max(pressure) ; Set the min and max of "tmYLDataTopF" : min(pressure) ; the left Y axis. "tmYLStyle" : "Irregular" ; Indicate that the left Y "tmYLIrregularPoints" : pressure ; axis values are irregular. ; By default, since we are ; defining the left axis, we are ; also defining the right axis. "tmXBOn" : False ; Turn off the bottom, top, and "tmXTOn" : False ; left tick marks and labels. "tmYLOn" : False "tmXBLabelsOn" : False "tmYLLabelsOn" : False "tmYRLabelsOn" : True ; Turn on the right y axis labels. "tmYLMode" : "Explicit" ; Explicitly define where we want "tmYLValues" : pressure ; tick marks and what labels we want "tmYLLabels" : pressure ; at them. end create draw(tmid) ; Draw the tick mark object. ; ; Create a text item to label the left Y axis. ; txid = create "text" textItemClass wid "txPosXF" : 0.10 ; X pos. of text "txPosYF" : 0.50 ; Y pos. of text "txFontHeightF" : 0.02 ; Change the size of the font. "txAngleF" : 90.0 ; Rotate the text 90 deg. counter-clockwise. "txString" : "Height (km)" end create draw(txid) ; Draw the text item. ; ; Change some values of previous text item to create a new label for ; the right Y axis. ; setvalues txid "txPosXF" : 0.9 ; X pos. of text (use same Y position as before) "txAngleF" : -90.0 ; Rotate the text 90 deg. clockwise "txString" : "Pressure (mb)" end setvalues draw(txid) ; Draw the text item. frame(wid) ; Advance the frame. endscale3.ncl:
begin ; ; Create some dummy data for the contour plot. ; N=12 T = new((/N,N/),float) jspn = ispan(-N/2,(N/2)-1,1)^2 ispn = ispan(-N/2,(N/2)-1,1)^2 do i = 0, dimsizes(ispn)-1 T(i,:) = ispn(i) + jspn end do T = 100.0 - sqrt(8^2 * T) ; ; Define an array of randomly spaced pressure values. These are the ; values that we want to go on the right Y axis. ; pressure = (/1000, 925, 875, 800, 700, 575, 450, 350, 200, 175, 75, 50/) ; ; Create an X workstation. ; wid = create "xwid" ncgmWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "contourdata" scalarFieldClass defaultapp "sfDataArray": T end create ; ; Create an XY plot. ; plotid = create "contour" contourPlotClass wid "cnScalarFieldData" : dataid "tmYUseLeft" : False ; Don't use tick marks on the right side ; that are used on left side. "tmYRMode" : "Explicit" ; Explicitly define where we want tick ; marks and what labels we want at them. ; ; Place the pressure values at equal intervals along the right Y axis. ; Note that the pressure values themselves are NOT equally spaced, but ; they will be placed at equal intervals on the axis. ; "tmYRValues" : fspan(0.,N-1,dimsizes(pressure)) "tmYRLabels" : pressure "tmYRLabelsOn" : True ; We have to turn on labels for the right axes, ; otherwise they won't appear. end create draw(plotid) ; Draw the contour plot. ; ; Create a text item to label the left Y axis. ; txid = create "text" textItemClass wid "txPosXF" : 0.12 ; X pos. of text "txPosYF" : 0.50 ; Y pos. of text "txFontHeightF" : 0.02 ; Change the size of the font. "txAngleF" : 90.0 ; Rotate the text 90 deg. counter-clockwise. "txString" : "Height (km)" end create draw(txid) ; Draw the text item. ; ; Change some values of previous text item to create a new label for ; the right Y axis. ; setvalues txid "txPosXF" : 0.91 ; X pos. of text (use same Y position as before) "txAngleF" : -90.0 ; Rotate the text 90 deg. clockwise "txString" : "Pressure (mb)" end setvalues draw(txid) ; Draw the text item. frame(wid) ; Advance the frame endspread_colors.ncl:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin cdf_file = addfile("$NCARG_ROOT/lib/ncarg/data/cdf/contour.cdf","r") Z = cdf_file->Z(0,0,:,:) ; geopotential height wks = gsn_open_wks("ncgm","spread_colors") ; Open an X11 workstation. gsn_define_colormap(wks,"temp1") ; Use a rainbow color map that ; has 63 colors and goes from ; gray to blue to red. cnres = True cnres@cnFillOn = True ; Turn on contour fill. cnres@pmLabelBarDisplayMode = True ; Turn on labelbar. cnres@lbPerimOn = False ; Turn off labelbar perimeter. plot = gsn_contour(wks,Z,cnres) ; Draw a filled contour plot. Note ; that the contour colors are mostly ; blue. cnres@gsnSpreadColors = True ; Choose colors across whole color map. plot = gsn_contour(wks,Z,cnres) ; Draw a filled contour plot. Note ; that the contour colors now span ; from gray to blue to red. endstream.ncl:
begin ; ; Generate streamline data arrays. ; M=30 N=30 PI=3.14159 U = 10.0 * sin(onedtond((2.0 * PI / N) * ispan(0,N-1,1),(/M,N/))) V = 10.0 * cos(onedtond((2.0 * PI / M) * ispan(0,M-1,1),(/N,M/))) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; vfid = create "data" vectorFieldClass defaultapp "vfUDataArray" : U "vfVDataArray" : V "vfXCStartV" : -90.0 ; minimum longitude value for overlay "vfXCEndV" : 90.0 ; maximum longitude value for overlay "vfYCStartV" : -45.0 ; minimum latitude value for overlay "vfYCEndV" : 45.0 ; maximum latitude value for overlay end create ; ; Create a StreamlinePlot object. ; stid = create "StreamlinePlot" streamlinePlotClass wid "stVectorFieldData" : vfid end create ; ; Create the default MapPlot object. ; mpid = create "MapPlot" mapPlotClass wid end create overlay(mpid,stid) ; Overlay streamline plot on map plot. draw(mpid) ; Draw map plot (streamline plot will be drawn too). frame(wid) ; Advance frame. endtdez2d.ncl:
begin ; ; Create some dummy data for the surface plot. ; N = 41 PI = 3.14159 x = fspan(0.,N-1,N) y = fspan(0.,N-1,N) z = 3.*sin(onedtond((PI/5) * ispan(0,N-1,1),(/N,N/))) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Retrieve the GKS workstation id, which is necessary in order to ; interact with low-level libraries. ; getvalues wid "wkGksWorkId" : gkswid end getvalues ; ; Call tdez2d to draw a surface plot. ; rho = 3.0 theta = -45.0 phi = 55.0 tdez2d(gkswid, x, y, z, rho, theta, phi, 6) frame(wid) ; Advance the frame. endtdez3d.ncl:
begin ; ; Create some dummy data for the surface plot. ; NX = 21 NY = 21 NZ = 21 xi = (/0.055483, 0.138127, 0.808924,-1.501205,-0.891079, 0.141545,\ 1.068575,-1.392315,-0.612384,-0.395337, 1.726188, 0.698080,\ -0.443068, 1.307718, 1.916745, 1.833857, 1.120456,-1.887692,\ -1.028046, 1.824213,-0.2324901/) yi = (/-1.297098, 1.790521,-1.094333,-1.664418,-0.527787, 1.062716,\ 1.120945, 0.501907, 1.668813, 0.427076, 1.479720, 1.033662,\ -0.577471,-0.336375,-1.494247, 0.949919, 1.031587,-0.725059,\ 0.358226,-0.723472, 1.660146/) zi = (/-0.765465,-1.313089,-0.020937,-0.441481, 1.933836, 0.585894,\ 1.291848,-0.741295, 0.079043, 1.141697, 1.466170, 0.327586,\ -1.199072,-0.145940,-1.149510,-0.363842, 1.827387, 1.027802,\ -1.826411,-1.762566, 0.289010/) wi = xi*xi + yi*yi + zi*zi ; ; Create the output grid. ; xmin = -2.0 ymin = -2.0 zmin = -2.0 xmax = 2.0 ymax = 2.0 zmax = 2.0 ii = fspan(0,20.,21) xo = xmin + (ii/(NX-1)) * (xmax-xmin) yo = ymin + (ii/(NY-1)) * (ymax-ymin) zo = zmin + (ii/(NZ-1)) * (zmax-zmin) ; ; Interpolate. ; wo = dsgrid3s(xi, yi, zi, wi, xo, yo, zo) ; ; Create an X workstation. ; wid = create "wks" ncgmWorkstationClass defaultapp end create ; ; Retrieve the GKS workstation id, which is necessary in order to ; interact with low-level libraries. ; getvalues wid "wkGksWorkId" : gkswid end getvalues ; ; Call tdez3d to draw a 3D plot. ; tdez3d(gkswid,xo,yo,zo,wo,3.,2.,-35.,65.,6) frame(wid) ; Advance the frame. endtitle.ncl:
begin ; Create an App object. appid = create "title_app" appClass defaultapp end create ; Create an X Workstation object. wid = create "example" xWorkstationClass appid end create ; Create a Title object. tid = create "title" titleClass wid end create draw(tid) ; Draw the title. frame(wid) ; Advance the frame. endvector.ncl:
begin ; ; Generate vector data arrays. ; M=30 N=30 PI=3.14159 U = 10.0 * sin(onedtond((2.0 * PI / N) * ispan(0,N-1,1),(/M,N/))) V = 10.0 * cos(onedtond((2.0 * PI / M) * ispan(0,M-1,1),(/N,M/))) ; ; Create an X workstation. ; wid = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; vfid = create "data" vectorFieldClass defaultapp "vfUDataArray" : U "vfVDataArray" : V "vfXCStartV" : -90.0 ; minimum longitude value for overlay "vfXCEndV" : 90.0 ; maximum longitude value for overlay "vfYCStartV" : -45.0 ; minimum latitude value for overlay "vfYCEndV" : 45.0 ; maximum latitude value for overlay end create ; ; Create a VectorPlot object. ; vcid = create "VectorPlot" vectorPlotClass wid "vcVectorFieldData" : vfid end create ; ; Create the default MapPlot object. ; mpid = create "MapPlot" mapPlotClass wid end create overlay(mpid,vcid) ; Overlay vector plot on map plot. draw(mpid) ; Draw map plot (vector plot will be drawn too). frame(wid) ; Advance frame. endxyplot1.ncl:
begin ; ; Create an X Workstation. ; wks = create "wks" xWorkstationClass defaultapp end create ; ; Create a data object. ; dataid = create "data" coordArraysClass defaultapp "caYArray" : (/1,3,-1,-2,0,2,3/) end create ; ; Create an XY plot. ; xy = create "xyplot" xyPlotClass wks "xyCoordData" : dataid end create ; ; Retrieve xyCoordDataSpec. ; getvalues xy "xyCoordDataSpec" : dataspec end getvalues ; ; Set the desired resources using "setvalues" on the resource we ; just retrieved. ; setvalues dataspec "xyLineColor" : 3 ; Change the line color to color index 3 ; (default is "1", the foreground color). "xyLineThicknessF" : 4.0 ; Quadruple the line thickness. "xyDashPattern" : 2 ; Change the line to a dash pattern (default ; is a solid line). end setvalues draw(xy) ; Draw the XY plot. frame(wks) ; Advance the frame. endxyplot2.ncl:
begin ; ; Create an X Workstation. ; wks = create "wks" xWorkstationClass defaultapp end create ; ; Create four data objects. ; dataid = new(4,graphic) do i=0,3 dataid(i) = create "data" coordArraysClass defaultapp "caYArray" : i + sin(ispan(0,20,1)*3.14159/4.) end create end do ; ; Create an XY plot, passing the array of data objects just created. ; xy = create "xyplot" xyPlotClass wks "xyCoordData" : dataid end create ; ; Retrieve xyCoordDataSpec (it will be an array of four elements, one ; for each data object created). ; getvalues xy "xyCoordDataSpec" : dataspec end getvalues ; ; Set the desired resources using "setvalues" on the resource we ; just retrieved. ; do i=0,3 setvalues dataspec(i) "xyLineColor" : i+1 ; Change the line color for each line. "xyLineThicknessF" : i+1 ; Change the line thickness for each line. "xyDashPattern" : i ; Change the dash pattern for each line. end setvalues end do draw(xy) ; Draw the XY plot. frame(wks) ; Advance the frame. end