Source code for adam.vis.visualize_lake_breeze

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import pyart
import matplotlib.pyplot as plt
import numpy as np
import warnings

from ..io import RadarImage

[docs] def visualize_lake_breeze(radar_scan: RadarImage, bg_field='reflectivity', time=None, **kwargs): """ This module will visualize the lake breeze using PyART's :py:meth:`pyart.graph.RadarMapDisplay`. The default settings are geared towards Chicago with the proper latitude and longitude ranges. Keyword arguments are passed into :py:meth:`pyart.graph.RadarMapDisplay.plot_ppi_map`. See the :py:meth:`pyart.graph.RadarMapDisplay.plot_ppi_map` documentation for more details on how to control the appearance of your plot. Parameters ---------- radar_scan: :py:meth:`RadarImage` This contains the :py:meth:`RadarImage` object with the inferred lake breeze mask already inside. bg_field: str The variable name of the field you want to plot the lake breeze mask over. time: str The time, in format YYYY-MM-DDTHH:MM:SS, of the radar scan to plot if the input RadarImage contains batch processed radar images. ADAM will look for the closest radar scan to this specified time when searching for scans. Returns ------- fig, ax: handles The matplotlib figure and axis handle for the plot. """ lat_lines = kwargs.pop('lat_lines', [41.2, 41.4, 41.6, 41.8, 42, 42.2, 42.4]) lon_lines = kwargs.pop('lon_lines', [-88.4, -88.2, -88, -87.8, -87.6]) vmin = kwargs.pop('vmin', -30) vmax = kwargs.pop('vmax', 60) sweep = kwargs.pop('sweep', 0) if isinstance(radar_scan.pyart_object, list) or isinstance(radar_scan.pyart_object, np.ndarray): my_times = np.array(radar_scan.times) if time is None: raise ValueError("Since the input radar_scan represents a batch of radar files, the UTC time in YYYY-MM-DDTHH:MM:SS format must be specified!") target_time = np.datetime64(time) my_ind = np.argmin(np.abs(my_times - target_time)) pyart_obj = pyart.io.read(radar_scan.pyart_object[my_ind]) lakebreeze_mask = radar_scan.lakebreeze_mask[my_ind].T else: pyart_obj = radar_scan.pyart_object lakebreeze_mask = radar_scan.lakebreeze_mask.squeeze().T disp = pyart.graph.RadarMapDisplay(pyart_obj) if 'ax' not in kwargs.keys(): fig, ax = plt.subplots(1, 1, figsize=(5, 5), subplot_kw=dict(projection=ccrs.PlateCarree())) else: fig = kwargs.pop('fig', plt.gcf()) ax = kwargs.pop('ax') disp.plot_ppi_map(bg_field, sweep=sweep, min_lon=radar_scan.lon_range[0], ax=ax, max_lon=radar_scan.lon_range[1], min_lat=radar_scan.lat_range[0], max_lat=radar_scan.lat_range[1], lat_lines=lat_lines, lon_lines=lon_lines, vmin=vmin, vmax=vmax, **kwargs) ax.coastlines() ax.add_feature(cfeature.STATES) ax.contour(radar_scan.grid_lon, radar_scan.grid_lat, lakebreeze_mask, levels=1) if isinstance(radar_scan.pyart_object, list): del pyart_obj return fig, ax