Benutzerspezifische Werkzeuge

##### Sektionen
Sie sind hier: NCL / DKRZ NCL plot a sub-region of curvilinear data example
Info
Alle Inhalte des Nutzerportal sind nur auf Englisch verfügbar.

# DKRZ NCL plot a sub-region of curvilinear data example

If the input data is on a curvilinear grid it is not as simple as described before to select a sub-region because the coordinate arrays lat and lon are not 1-dimensional arrays. In this example script it is shown how to retrieve the indices of a given sub-region and to define a subset of the data and its subsetted coordinate arrays.

Example script:

```;----------------------------------------------------
; DKRZ NCL example: subregion_of_curvilinear_data_plot_with_gridlines.ncl
;
; Description:  - select a sub-region of the curvilinear data
;               - attach gridlines of the subsetted data
;
; 01.04.16  meier-fleischer(at)dkrz.de
;----------------------------------------------------
begin
f         =  addfile("\$HOME/NCL/NCL_User_Guide/data/tos_ocean_bipolar_grid.nc","r")
var       =  f->tos(0,:,:)
lon2d     =  f->lon
lat2d     =  f->lat
lon2d     =  where(lon2d .le. 180., lon2d, lon2d-360.)

;-- select lat/lon region
lons      =  (/ 80., 170./)
lats      =  (/-20.,  60./)

;-- you cannot use "{" and "}" for coordinate subscripting, because
;-- lat2d and lon2d are not 1D coordinate arrays
ij        =  getind_latlon2d(lat2d, lon2d, lats, lons) ;-- retrieve indices of sub-region
ilat1     =  ij(0,0)                                  ;-- indices min lat
ilat2     =  ij(1,0)                                  ;-- indices max lat
ilon1     =  ij(0,1)                                  ;-- indices min lon
ilon2     =  ij(1,1)                                  ;-- indices max lon
var_sub   =  var(ilat1:ilat2,ilon1:ilon2)             ;-- var data of sub-region
lat2d_sub =  lat2d(ilat1:ilat2,ilon1:ilon2)           ;-- lats of sub-region
lon2d_sub =  lon2d(ilat1:ilat2,ilon1:ilon2)           ;-- lons of sub-region

;-- open workstation
wks_type          = "png"
wks_type@wkWidth  =  1200
wks_type@wkHeight =  1200
wks  =  gsn_open_wks(wks_type,"plot_cclm_curvelinear_map_test")

;-- set resources
res                       =  True
res@gsnDraw               =  False                    ;-- don't draw plot yet
res@gsnFrame              =  False                    ;-- don't advance frame
res@gsnMaximize           =  True                     ;-- maximize plot output
res@gsnAddCyclic          =  False                    ;-- don't add cyclic points
res@gsnLeftStringFontHeightF  =  0.010                ;-- decrease left string font size
res@gsnRightStringFontHeightF =  0.010                ;-- decrease right string font size

;-- contour settings
res@cnFillMode            = "RasterFill"
res@cnFillOn              =  True                     ;-- set contour fill
res@cnLinesOn             =  False                    ;-- don't draw contour lines
res@cnLevelSelectionMode  = "ManualLevels"            ;-- set manual contour levels
res@cnMinLevelValF        =  235.0                    ;-- min contour level
res@cnMaxLevelValF        =  310.0                    ;-- max contour level
res@cnLevelSpacingF       =  0.5                      ;-- contour level interval

;-- labelbar settings
res@lbBoxMinorExtentF     =  0.17                     ;-- decrease height of labelbar boxes
res@pmLabelBarOrthogonalPosF = -0.022                 ;-- move labelbar upward

;-- use sub-region grid
res@sfYArray              =  lat2d_sub                ;-- set y array to be used
res@sfXArray              =  lon2d_sub                ;-- set x array to be used

;-- axis lat/lon settings
res@gsnMajorLatSpacing    =  15                       ;-- change maj lat tm spacing
res@gsnMajorLonSpacing    =  15                       ;-- change maj lon tm spacing
res@gsnMinorLatSpacing    =   5                       ;-- change maj lat tm spacing
res@gsnMinorLonSpacing    =   5                       ;-- change maj lon tm spacing

;-- y-axis
res@tmYRLabelsOn          =  True                     ;-- draw right side labels of map
res@tmYLLabelFontHeightF  =  0.008                    ;-- left side label font size
res@tmYLMajorLengthF      =  0.005                    ;-- left side major tickmarks length
res@tmYLMinorLengthF      =  0.0025                   ;-- left side minor tickmarks length
res@tmYRLabelFontHeightF  =  0.008                    ;-- right side label font size
res@tmYRMajorLengthF      =  0.005                    ;-- right side major tickmarks length
res@tmYRMinorLengthF      =  0.0025                   ;-- right side major tickmarks length

;-- x-axis
res@tmXTLabelsOn          =  True
res@tmXBLabelFontHeightF  =  0.008                    ;-- x bottom label font size
res@tmXBMajorLengthF      =  0.005                    ;-- x bottom major tickmarks length
res@tmXBMinorLengthF      =  0.0025                   ;-- x bottom major tickmarks length
res@tmXBLabelDeltaF       = -0.6                      ;-- increase distance between x-axis and labels
res@tmXTLabelFontHeightF  =  0.008                    ;-- x top label font size
res@tmXTMajorLengthF      =  0.005                    ;-- x top major tickmarks length
res@tmXTMinorLengthF      =  0.0025                   ;-- x top major tickmarks length
res@tmXBLabelDeltaF       = -0.6                      ;-- increase distance between x-axis and labels

;-- map settings
res@mpMinLatF             =  min(lat2d_sub)-10        ;-- map min lat
res@mpMaxLatF             =  max(lat2d_sub)+10        ;-- map max lat
res@mpMinLonF             =  min(lon2d_sub)-10        ;-- map min lon
res@mpMaxLonF             =  max(lon2d_sub)+10        ;-- map max lon
res@mpCenterLonF          = (res@mpMinLonF+res@mpMaxLonF)/2.  ;-- map center lon

;-- title string settings
res@tiMainString          = "Curvilinear data:  sub-region with grid lines"
res@tiMainFontHeightF     =  0.018

;-- create the plot
plot = gsn_csm_contour_map(wks, var_sub, res)

;-- attach lat/lon grid lines of subsetted data
gsres                     = True
gsres@gsnCoordsLat        = lat2d_sub                 ;-- use coordinate latitudes
gsres@gsnCoordsLon        = lon2d_sub                 ;-- use coordinate longitudes
gsres@gsnCoordsAsLines    = True                      ;-- draw grid as lines
gsres@gsnCoordsAttach     = True                      ;-- attach it to plot
gsn_coordinates(wks,plot,var_sub,gsres)               ;-- draw the grid lines of the data

;-- draw the plot and advance the frame
draw(plot)
frame(wks)

end```

Artikelaktionen