NCL_dataonmap_10.pyΒΆ

This script illustrates the following concepts:
  • Plotting WRF data on native grid

  • Plotting data using wrf python functions

  • Overlaying continent outlines on a map

  • Following best practices when choosing a colormap. More information on colormap best practices can be found here.

See following URLs to see the reproduced NCL plot & script:

Import packages

import cartopy.crs as ccrs
import geocat.datafiles as gdf
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np
from geocat.viz import util as gvutil
from netCDF4 import Dataset
from wrf import getvar, latlon_coords, to_np

Read in the data

wrfin = Dataset(gdf.get("netcdf_files/wrfout_d01_2003-07-15_00_00_00"),
                decode_times=True)
q2 = getvar(wrfin, "Q2")

Plot the data

# Get the latitude and longitude coordinate. This is usually needed for plotting.
lats, lons = latlon_coords(q2)

# Generate figure (set its size (width, height) in inches)
fig = plt.figure(figsize=(10, 10))

# Generate axes using Cartopy
ax = plt.axes(projection=ccrs.PlateCarree())

# Add filled contours
plt.contourf(to_np(lons),
             to_np(lats),
             q2,
             levels=np.linspace(0.01125, 0.05, 32),
             cmap="magma",
             vmin=0,
             vmax=0.05,
             zorder=4)

# Add a colorbar
cbar = plt.colorbar(ax=ax,
                    orientation="vertical",
                    ticks=np.arange(0.0125, 0.0476, 0.0025),
                    drawedges=True,
                    extendrect=True,
                    shrink=0.65)

# Format colorbar ticks and labels
cbar.ax.tick_params(size=0, labelsize=10)

# Draw gridlines
gl = ax.gridlines(crs=ccrs.PlateCarree(),
                  draw_labels=True,
                  dms=False,
                  x_inline=False,
                  y_inline=False,
                  linewidth=1,
                  color="k",
                  alpha=0.25,
                  zorder=4)

# Manipulate latitude and longitude gridline numbers and spacing
gl.top_labels = False
gl.right_labels = False
gl.xlocator = mticker.FixedLocator(np.arange(-105, -80, 5))
gl.ylocator = mticker.FixedLocator(np.arange(18, 35, 2))
gl.xlabel_style = {"rotation": 0, "size": 10}
gl.ylabel_style = {"rotation": 0, "size": 10}
gl.xlines = True
gl.ylines = True

# Add titles and labels to projection
gvutil.set_titles_and_labels(ax,
                             maintitle="WRF data on native grid",
                             lefttitle="QV at 2 M",
                             maintitlefontsize=16,
                             lefttitlefontsize=14)

plt.show()
QV at 2 M, WRF data on native grid

Total running time of the script: ( 0 minutes 2.272 seconds)

Gallery generated by Sphinx-Gallery