PyNGL example panel plot#

Software requirements:

  • Python 2.7.x

  • Numpy 1.9.2

  • PyNGL/PyNIO 1.5.0

Run the panel example script:

python PyNGL_panel.py

Script PyNGL_panel.py:

'''
 DKRZ PyNGL Script: PyNGL_panel.py

 Description:       plot 3 plots on one physical page

 11.05.15  meier-fleischer(at)dkrz.de
'''
import numpy,sys,os
import Ngl, Nio

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

    #--  define variables
    diri   = "$HOME/NCL/general/data/new_data/"    #-- 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
    f      =  Nio.open_file(diri + fname,"r")

    temp   =  f.variables["tsurf"][0,::-1,:]        #-- first time step, reverse latitude
    temp19 =  f.variables["tsurf"][19,::-1,:]       #-- first time step, reverse latitude
    temp39 =  f.variables["tsurf"][39,::-1,:]       #-- first time step, reverse latitude

    lat    =  f.variables["lat"][::-1]              #-- reverse latitudes
    lon    =  f.variables["lon"][:]                 #-- all longitudes

    tempac   =  Ngl.add_cyclic(temp[:,:])           #-- add cyclic point
    temp19ac =  Ngl.add_cyclic(temp19[:,:])         #-- add cyclic point
    temp39ac =  Ngl.add_cyclic(temp39[:,:])         #-- add cyclic point

    #-- open a workstation
    wkres             =  Ngl.Resources()            #-- generate an resources object for workstation
    wkres.wkColorMap  = "rainbow"                   #-- choose colormap
    wkres.wkWidth     =  1024                       #-- width of workstation
    wkres.wkHeight    =  1024                       #-- height of workstation
    wks_type          = "png"                       #-- output type
    wks               =  Ngl.open_wks(wks_type,"Py_panel",wkres)  #-- open workstation

    #-- set res
    res                       =  Ngl.Resources()    #-- generate an res object for plot
    res.nglDraw               = False               #-- don't draw individual plots
    res.nglFrame              = False               #-- don't advance frame

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

    #-- 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"      #-- set manual levels
    res.cnMinLevelValF        =  minval             #-- minimum value
    res.cnMaxLevelValF        =  maxval             #-- maximum value
    res.cnLevelSpacingF       =  inc                #-- increment

    #-- grid resources
    res.sfXCStartV            =  float(min(lon))    #-- minimum longitude
    res.sfXCEndV              =  float(max(lon))    #-- maximum longitude
    res.sfYCStartV            =  float(min(lat))    #-- minimum latitude
    res.sfYCEndV              =  float(max(lat))    #-- maximum latitude

    #-- labelbar resources
    res.pmLabelBarDisplayMode = "Never"             #-- turn off the label bar

    #-- assign plot array for all 3 plots
    plot = []

    #-- create the plots, but don't draw it yet
    #-- plot 1
    res.tiMainString              = "time = 01"     #-- title string
    plot.append(Ngl.contour_map (wks,tempac,res))   #-- time = 0

    #-- plot 2
    res.tiMainString              = "time = 20"     #-- title string
    plot.append(Ngl.contour_map (wks,temp19ac,res)) #-- time = 19

    #-- plot 3
    res.tiMainString              = "time = 40"     #-- title string
    plot.append(Ngl.contour_map (wks,temp39ac,res)) #-- time = 39

    #-- draw a common title string on top of the panel
    textres               =  Ngl.Resources()
    textres.txFontHeightF =  0.025                  #-- title string size
    Ngl.text_ndc(wks,"Panel Plot",0.5,.97,textres)  #-- add title to plot

    #-- set some panel resources: a common labelbar and title
    #-- "[3,1]" indicates 3 row, 1 columns
    panelres                  =  Ngl.Resources()
    panelres.nglPanelLabelBar =  True               #-- common labelbar
    panelres.nglPanelYWhiteSpacePercent =  0        #-- reduce space between the panel plots
    panelres.nglPanelXWhiteSpacePercent =  0        #-- reduce space between the panel plots
    panelres.nglPanelTop      =  0.95               #-- top position of panel

    #-- create the panel
    Ngl.panel(wks,plot,[3,1],panelres)

    #-- done
    Ngl.end()

if __name__ == '__main__':
    main()

Result:

PyNGL panel plot w400