Skip to article frontmatterSkip to article content

ARMOR Data Plots

This notebook walks through plotting data from the ARMOR radar in northern Alabama and the local NWS radar in Huntsville, Alabama.

import pyart
import glob
import matplotlib.pyplot as plt
import matplotlib.patheffects as pe
import numpy as np
import fsspec
from pathlib import Path
import geopandas as gpd
import fiona
import cartopy.crs as ccrs

fiona.drvsupport.supported_drivers['libkml'] = 'rw' # enable KML support which is disabled by default
fiona.drvsupport.supported_drivers['LIBKML'] = 'rw' # enable KML support which is disabled by default

Read the Site Information

site_locations = gpd.read_file("locations/ARM-SE.kmz")
site_locations
Loading...

Plot the ARMOR Data

Prior to running this notebook, the datasets were downloaded from this shared Google drive and placed in a /data directory.

This case is from a cool-season event that resulted in a Quasi-Linear Convective System forming within the AMF3/ARM-SE domain. We are using data from the UAH ARMOR radar.

armor_files = sorted(glob.glob("data/*"))

Configure the domain of the plots

lon_min = -89
lon_max = -85
lat_min = 33.5
lat_max = 36
grid_line_spacing = .5

Loop through each file, plot the reflectivity, and save the image

for file in armor_files:
    radar = pyart.io.read(file)
    fields = list(radar.fields)
    if "REF" in fields: 
        display = pyart.graph.RadarMapDisplay(radar)
        fig = plt.figure(figsize=(12,8))
        ax = plt.subplot(111, projection=ccrs.PlateCarree())
        display.plot_ppi_map("REF",
                             fig=fig,
                             ax=ax,
                             vmin=-20,
                             vmax=60,
                             lat_lines=np.arange(lat_min, lat_max, grid_line_spacing),
                             lon_lines=np.arange(lon_min, lon_max, grid_line_spacing),
                             min_lat = lat_min,
                             max_lat = lat_max,
                             min_lon = lon_min,
                             max_lon = lon_max,
                             cmap='pyart_HomeyerRainbow')
        site_locations.plot(ax=ax, column='Name')
        for x, y, label in zip(site_locations.geometry.x, site_locations.geometry.y, site_locations.Name):
            ax.annotate(label, xy=(x, y), xytext=(2, 2), textcoords="offset points", fontsize=7, color='white', path_effects=[pe.withStroke(linewidth=2, foreground="k")])
        plt.savefig(f"images/{Path(file).stem}.png", facecolor='white', transparent=False)
        plt.show()
        plt.close()
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/matplotlib/colors.py:621: RuntimeWarning: overflow encountered in multiply
  xa *= self.N
<Figure size 1200x800 with 2 Axes>

Plot the NEXRAD Data

Search and find the NEXRAD Data

fs = fsspec.filesystem("s3", anon=True)
year = "2021"
month = "12"
day = "11"
hour = "11"
nexrad_files = sorted(fs.glob(f"s3://noaa-nexrad-level2/{year}/{month}/{day}/KHTX/KHTX{year}{month}{day}_{hour}*"))
nexrad_files
['noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_110352_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_110854_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_111400_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_111923_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_112446_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_113009_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_113504_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_114018_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_114532_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_115031_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_115545_V06', 'noaa-nexrad-level2/2021/12/11/KHTX/KHTX20211211_115545_V06_MDM']

Loop through each file, plot the reflectivity, and save the image

for file in nexrad_files:
    try:
        radar = pyart.io.read_nexrad_archive(f"s3://{file}")
    except:
        continue
    fields = list(radar.fields)
    if "reflectivity" in fields: 
        display = pyart.graph.RadarMapDisplay(radar)
        fig = plt.figure(figsize=(12,8))
        ax = plt.subplot(111, projection=ccrs.PlateCarree())
        display.plot_ppi_map("reflectivity",
                             fig=fig,
                             ax=ax,
                             vmin=-20,
                             vmax=60,
                             lat_lines=np.arange(lat_min, lat_max, grid_line_spacing),
                             lon_lines=np.arange(lon_min, lon_max, grid_line_spacing),
                             min_lat = lat_min,
                             max_lat = lat_max,
                             min_lon = lon_min,
                             max_lon = lon_max,
                             cmap='pyart_HomeyerRainbow')
        site_locations.plot(ax=ax, column='Name')
        for x, y, label in zip(site_locations.geometry.x, site_locations.geometry.y, site_locations.Name):
            ax.annotate(label, xy=(x, y), xytext=(2, 2), textcoords="offset points", fontsize=7, color='white', path_effects=[pe.withStroke(linewidth=2, foreground="k")])
        plt.savefig(f"images/{Path(file).stem}.png", facecolor='white', transparent=False)
        plt.show()
        plt.close()
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:451: UserWarning: The .xlabels_top attribute is deprecated. Please use .top_labels to toggle visibility instead.
  warnings.warn('The .xlabels_top attribute is deprecated. Please '
/Users/mgrover/miniforge3/envs/pyart-docs/lib/python3.10/site-packages/cartopy/mpl/gridliner.py:487: UserWarning: The .ylabels_right attribute is deprecated. Please use .right_labels to toggle visibility instead.
  warnings.warn('The .ylabels_right attribute is deprecated. Please '
<Figure size 1200x800 with 2 Axes>