Map Projection (using PyGMT)

Compared to Cartopy package, PyGMT provides higher resolution map projection.

Monthly dataset

Read data and calculate the monthly average as if you were programming with the Cartopy pakage.

    # Monthly average
    m1 = df1.resample('1M').mean()

Monthly temperature plots on a map

Pygmt install

The map projection uses PyGMT package.

You can simply command $ conda install -n env_weclim -c conda-forge pygmt. The information on PyGMT installation is available here.

Map plots

The background map can be drawn using the following commends:

import pygmt
def read_maps(dat,lons,lats,minlon,maxlon,minlat,maxlat,titleX):

 #define etopo data file
 topo_data = '@earth_relief_30s' #30 arc second global relief (SRTM15+V2.1 @ 1.0 km)

 # Visualization
 fig = pygmt.Figure()

 # make color pallets
 pygmt.makecpt(
    cmap='topo',
    series='-8000/8000/1000',
    continuous=True
 )

 #plot high res topography
 fig.grdimage(
    grid=topo_data,
    region=[minlon, maxlon, minlat, maxlat], 
    projection='M4i',
    shading=True,
    frame=True
    )

 # plot coastlines
 fig.coast(
    region=[minlon, maxlon, minlat, maxlat], 
    projection='M4i', 
    shorelines=True,
    frame=True
    )
 fig.coast(borders=["2/0.5p,red"])

 # plot topo contour lines
 fig.grdcontour(
    grid=topo_data,
    interval=4000,
    annotation="4000+f6p",
    limit="-8000/0",
    pen="a0.15p"
    )

 ## Plot colorbar
 # Default is horizontal colorbar
 fig.colorbar(
    frame='+l"Topography (m)"',
    position="x11.5c/6.6c+w6c+jTC+v"
    )

 # Color options and data range
 pygmt.makecpt(cmap="jet", series=[-20,40])

 # Plot temperature at each weather station
 fig.plot(
    x=lons,
    y=lats, 
    style='c0.1i', 
    color=dat['TAIR'], 
    cmap=True,
    pen='black',
    label='something'
    )

 # Main and colorbar titles 
 fig.basemap(frame=["a", f'WSne+t"{titleX}"'])
 fig.colorbar(frame='af+l"Air Temperature (oC)"')

 return(fig)

dat are temperature data for all locations including longitude lons and latitude lats information. maxlat minlat maxlon minlon are the range of map area.

fig.coast(borders=["2/0.5p,red"]) : borders options are 1 (National boundaries), 2 (State boundaries within the America), 3 (Marine boundaries), and a (All boundaries).

fig.basemap(frame=["a", f'WSne+t"{titleX}"']) : Wsne is the title positioning.

Sample program for maps

Source file: maps.pygmt.py

Create animation

PNG files can be converted to animated images (gif file).

convert -delay 50 -loop 3 ${figdir}/*.png TAIR.gif

Here, -delay N is the frame rate of N/100 (seconds) and -loop M is the number of loop of the animation image.

You can check the animation image as $ animate XX.gif.