PyNGL example rectilinear grid contour plot#

Software requirements:

  • Python 2 or 3

  • PyNGL 1.6.1

  • xarray

Run the rectilinear grid contour example script:

python PyNGL_rectilinear_contour.py

Script PyNGL_rectilinear_contour.py:

'''
DKRZ PyNGL Script: PyNGL_rectilinear_contour.py

Description: Python script using PyNGL Python module

 - contour plot on map (rectilinear data)

09.02.21 meier-fleischer(at)dkrz.de
'''
import xarray as xr
import Ngl

#-----------------------------------------------------------------------
#-- Function: main
#-----------------------------------------------------------------------
def main():

    #-- define variables
    diri = '/sw/spack-levante/ncl-6.6.2-r3hsef/lib/ncarg/data/nug/'  #-- data directory
    fname = 'rectilinear_grid_2D.nc' #-- data file name

    minval = 250.                  #-- minimum contour level
    maxval = 315                   #-- maximum contour level
    inc = 5.                       #-- contour level spacing
    ncn = (maxval-minval)/inc + 1  #-- number of contour levels

    #-- open file and read variables

    ds = xr.open_dataset(diri + fname)

    temp = ds.tsurf[0,::-1,:]
    lat = ds.lat[::-1]
    lon = ds.lon[:]

    tempac = Ngl.add_cyclic(temp[:,:])  #-- add cyclic points

    #-- open a workstation
    wkres = Ngl.Resources()     #-- generate an res object for workstation
    wkres.wkWidth = 1024        #-- plot resolution 2500 pixel width
    wkres.wkHeight = 1024       #-- plot resolution 2500 pixel height
    wkres.wkColorMap = 'rainbow'  #-- choose colormap
    wks_type = 'png'            #-- graphics output type

    wks = Ngl.open_wks(wks_type,'Py_rectilinear_contour',wkres)  #-- open workstation

    #-- set resources
    res = Ngl.Resources()       #-- generate an resource object for plot

    res.tiMainString = ds.tsurf.long_name  #-- title

    #-- viewport resources
    res.vpXF = 0.1              #-- start x-position of viewport
    res.vpYF = 0.9              #-- start y-position of viewport
    res.vpWidthF = 0.7          #-- width of viewport
    res.vpHeightF = 0.7         #-- height of viewport

    #-- contour resources
    res.cnFillOn = True         #-- turn on contour fill
    res.cnLineLabelsOn = False  #-- turn off line labels
    res.cnInfoLabelOn = False   #-- turn off info label
    res.cnLevelSelectionMode = "ManualLevels" #-- select manual level selection mode
    res.cnMinLevelValF = minval #-- minimum contour value
    res.cnMaxLevelValF = maxval #-- maximum contour value
    res.cnLevelSpacingF = inc   #-- contour increment

    #-- grid data information resources
    res.sfXCStartV = float(min(lon)) #-- x-axis location of 1st element lon
    res.sfXCEndV = float(max(lon))   #-- x-axis location of last element lon
    res.sfYCStartV = float(min(lat)) #-- y-axis location of 1st element lat
    res.sfYCEndV = float(max(lat))   #-- y-axis location of last element lat

    #-- labelbar resources
    res.pmLabelBarDisplayMode = "Always" #-- turn on the label bar
    res.lbOrientation = "Horizontal"     #-- labelbar orientation

    #-- draw contours over a map
    map = Ngl.contour_map(wks,tempac,res)

    #-- done
    Ngl.end()

if __name__ == '__main__':
    main()

Result:

PyNGL rectilinear grid contour plot w400