Sie sind hier: Startseite / Services / Data Analysis and Visualization / Visualization / Software / PyNGL / DKRZ PyNGL map tickmark example Lambert Conformal projection
Info
Alle Inhalte des Nutzerportal sind nur auf Englisch verfügbar.

DKRZ PyNGL map tickmark example Lambert Conformal projection

This example shows how to add tickmarks to Lambert Conformal projection map.

Example script:

#
#  File:
#    mptick_9.py
#
#  Synopsis:
#    Demonstrates how to explicitly label the axes with the tickmarks and labels you want.
#    You can use this for rectangular map projections only.
#
#  Categories:
#    map plot
#
#  Based on NCL example:
#    mptick_9.ncl
#
#  Author:
#    Karin Meier-Fleischer
#  
#  Date of initial publication:
#    November 2018
#
#  Description:
#    This example shows how to create a map.
#
#  Effects illustrated:
#    o  Explicitly setting map tickmarks and labels
#    o  Attaching a plot as an annotation of another plot
#    o  Drawing a lambert conformal map
#    o  Drawing a mercator map
#    o  Maximizing plots after they've been created
#    o  Converting NDC values to lat/lon values
#    o  Using "get_float" to retrieve the size of a plot
#    o  Creating a blank plot
#    o  Drawing a map using the medium resolution map outlines
#    o  Moving the main title up
#
#  Output:
#    A single visualization is produced.
#
'''
  PyNGL Example:     mptick_9.py

  -  Explicitly setting map tickmarks and labels
  -  Attaching a plot as an annotation of another plot
  -  Drawing a lambert conformal map
  -  Drawing a mercator map
  -  Maximizing plots after they've been created
  -  Converting NDC values to lat/lon values
  -  Using "get_float" to retrieve the size of a plot
  -  Creating a blank plot
  -  Drawing a map using the medium resolution map outlines
  -  Moving the main title up
 
'''
from __future__ import print_function
import numpy as np
import Ngl

#-------------------------------------------------------
# Function to attach lat/lon labels to a Robinson plot
#-------------------------------------------------------
def add_labels(wks,map,dlat,dlon):

#-- generate lat/lon values
  dla = (180.0/dlat)+1                  #-- number of lat labels
  dlo = (360.0/dlon)+1                  #-- number of lon lables
 
  lat_values = np.linspace( -90.0,  90.0, dla, endpoint=True)
  lon_values = np.linspace(-180.0, 180.0, dlo, endpoint=True)
  nlat       = len(lat_values)
  nlon       = len(lon_values)

#-- assign arrays to hold the labels
  lft, rgt                     = [],[]
  lat_lft_label, lat_rgt_label = [],[]
  lon_bot_label                = []

#-- text resources
  txres               = Ngl.Resources()
  txres.txFontHeightF = 0.01

#-- add degree sign and S/N to the latitude labels
#-- don't write 90S label which would be too close to the lon labels
  for l in lat_values:
      if l == -90.0:  
         lat_lft_label.append("".format(l))
         lat_rgt_label.append("".format(l))
      elif l < 0:
         lat_lft_label.append("{}~S~o~N~S    ".format(np.fabs(l)))
         lat_rgt_label.append("    {}~S~o~N~S".format(np.fabs(l)))
      elif l > 0:
         lat_lft_label.append("{}~S~o~N~N    ".format(l))
         lat_rgt_label.append("    {}~S~o~N~N".format(l))
      else:
         lat_lft_label.append("0  ")
         lat_rgt_label.append("   0")

#-- add degree sign and W/E to the longitude labels
  for l in lon_values:
      if l < 0:
         lon_bot_label.append("{}~S~o~N~W".format(np.fabs(l)))
      elif l > 0:
         lon_bot_label.append("{}~S~o~N~E".format(l))
      else:
         lon_bot_label.append("0")

#-- add the latitude labels left and right to the plot
  for n in range(0,nlat):
     txres.txJust = "CenterRight"
     lft.append(Ngl.add_text(wks,map,lat_lft_label[n],-180.0,\
                                      lat_values[n],txres))
     txres.txJust = "CenterLeft"
     rgt.append(Ngl.add_text(wks,map,lat_rgt_label[n],180.0,\
                                       lat_values[n],txres))
#-- add the longitude labels at the bottom of the plot
  bot = []
  for n in range(0,nlon):
     txres.txJust = "TopCenter"
     bot.append(Ngl.add_text(wks,map,lon_bot_label[n],lon_values[n],\
                                      -90.0,txres))
  return

#-------------------------------------------------------
#                       MAIN
#-------------------------------------------------------
wks = Ngl.open_wks("png","plot_mptick_9")               #-- open workstation

#-----------------------------------
#-- first plot: Lambert Conformal
#-----------------------------------
mpres                        =  Ngl.Resources()         #-- resource object
mpres.nglDraw                =  False                   #-- turn off plot draw and frame advance. We will
mpres.nglFrame               =  False                   #-- do it later after adding subtitles.

mpres.mpFillOn               =  True                    #-- turn map fill on
mpres.mpOutlineOn            =  False                   #-- outline map
mpres.mpOceanFillColor       = "Transparent"            #-- set ocean fill color to transparent
mpres.mpLandFillColor        = "Gray90"                 #-- set land fill color to gray
mpres.mpInlandWaterFillColor = "Gray90"                 #-- set inland water fill color to gray

mpres.tiMainString           = "Lambert Conformal Map"
mpres.tiMainOffsetYF         =  0.05
 
mpres.mpProjection           = "LambertConformal"
mpres.mpLambertParallel1F    =  10
mpres.mpLambertParallel2F    =  70
mpres.mpLambertMeridianF     = -100
mpres.mpLimitMode            = "LatLon"
mpres.mpMinLatF              =  20
mpres.mpMaxLatF              =  55
mpres.mpMinLonF              = -140
mpres.mpMaxLonF              = -60
mpres.mpGridAndLimbOn        =  True
mpres.mpGridSpacingF         =  10.

mpres.pmTickMarkDisplayMode  = "Always"
 
#-- create and draw the basic map
map = Ngl.map(wks,mpres)

#-- add labels to the plot
tx = add_labels(wks,map,30,90)

#-- draw the plot and advance the frame
Ngl.draw(map)
Ngl.frame(wks)

del(mpres)  #-- delete resource object

#-----------------------------------
#-- second plot: Mercator projection
#-----------------------------------
mpres                        =  Ngl.Resources()
mpres.nglDraw                =  False                   #-- turn off plot draw and frame advance. We will
mpres.nglFrame               =  False                   #-- do it later after adding subtitles.

mpres.tiMainString           = "Mercator Map"           #-- title
mpres.tiMainFontHeightF      =  0.020                   #-- increase font size

mpres.mpFillOn               =  False                   #-- turn off land fill
mpres.mpDataBaseVersion      = "MediumRes"              #-- use finer database
mpres.mpProjection           = "mercator"               #-- projection
mpres.mpLimitMode            = "Corners"                #-- method to zoom
mpres.mpLeftCornerLatF       =   32
mpres.mpLeftCornerLonF       =  128
mpres.mpRightCornerLatF      =   55
mpres.mpRightCornerLonF      =  144

mpres.pmTickMarkDisplayMode  = "Always"                 #-- turn on tickmarks

#-- create and draw the basic map
map = Ngl.map(wks,mpres)

#-- maximize the plot, draw it and advance the frame
Ngl.maximize_plot(wks,map)
Ngl.draw(map)
Ngl.frame(wks)

Ngl.end()

Result:

Artikelaktionen