# DKRZ PyNGL map tickmark example Lambert Conformal projection#

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
#-------------------------------------------------------

#-- 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"
lat_values[n],txres))
txres.txJust = "CenterLeft"
lat_values[n],txres))
#-- add the longitude labels at the bottom of the plot
bot = []
for n in range(0,nlon):
txres.txJust = "TopCenter"
-90.0,txres))
return

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

#-------------------------------------------------------
#                       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

#-- 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()

if __name__ == '__main__':
main()
```

Result: