Source code for sorts.plotting.radar

#!/usr/bin/env python

'''Radar configuration plot functions

'''

#Python standard import

#Third party import
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.cm as cm
from mpl_toolkits.mplot3d import Axes3D

#Local import

from . import general
from .. import frames


[docs]def radar_earth(ax, radar, **kwargs): tx_names = kwargs.pop('tx_names', None) rx_names = kwargs.pop('rx_names', None) grid_earth(ax, **kwargs) for ind, tx in enumerate(radar.tx): if tx_names is None: ax.plot([tx.ecef[0]],[tx.ecef[1]],[tx.ecef[2]],"x",color='r') else: ax.plot([tx.ecef[0]],[tx.ecef[1]],[tx.ecef[2]],"x",color='r',label=tx_names[ind]) for ind, rx in enumerate(radar.rx): if rx_names is None: ax.plot([rx.ecef[0]],[rx.ecef[1]],[rx.ecef[2]],"x",color='r') else: ax.plot([rx.ecef[0]],[rx.ecef[1]],[rx.ecef[2]],"x",color='r',label=rx_names[ind])
[docs]def radar_map(radar, ax=None): '''Plot the geographical location of the radar system using the GeoPandas library. To get: pip install git+git://github.com/geopandas/geopandas.git pip install descartes ''' try: import geopandas except ImportError: geopandas = None raise ImportError('Cannot plot geo-location of radar without "geopandas" package') if ax is None: fig = plt.figure(figsize=(15,7)) ax = fig.add_subplot(111) df = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres')) ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k', linewidth=0.25, color='lightgrey', ax=ax) max_min_geo = {'lat': [0,0], 'lon': [0,0]} sites = [] lats = [] lons = [] for ind, r in enumerate(radar.tx): lons.append(r.lon) lats.append(r.lat) sites.append(f'TX-{ind}') df_sites_tx = pd.DataFrame( {'Site': sites, 'Latitude': lats, 'Longitude': lons} ) sites_rx = [] lats_rx = [] lons_rx = [] for ind, r in enumerate(radar.rx): lons_rx.append(r.lon) lats_rx.append(r.lat) sites_rx.append(f'RX-{ind}') df_sites_rx = pd.DataFrame( {'Site': sites_rx, 'Latitude': lats_rx, 'Longitude': lons_rx} ) max_min_geo['lat'][0] = np.min(np.array([lats + lats_rx])) max_min_geo['lat'][1] = np.max(np.array([lats + lats_rx])) max_min_geo['lon'][0] = np.min(np.array([lons + lons_rx])) max_min_geo['lon'][1] = np.max(np.array([lons + lons_rx])) _lat_df = 5.0 _lon_df = 10.0 if max_min_geo['lat'][0] > -(90.0 - _lat_df): max_min_geo['lat'][0] -= _lat_df if max_min_geo['lat'][1] < 90.0 - _lat_df: max_min_geo['lat'][1] += _lat_df if max_min_geo['lon'][0] > -(180.0 - _lon_df): max_min_geo['lon'][0] -= _lon_df if max_min_geo['lon'][1] < 180.0 - _lon_df: max_min_geo['lon'][1] += _lon_df _font = 8 df_sites_rx['Coordinates'] = list(zip(df_sites_rx.Longitude, df_sites_rx.Latitude)) df_sites_rx['Coordinates'] = df_sites_rx['Coordinates'].apply(Point) gdf_rx = geopandas.GeoDataFrame(df_sites_rx, geometry='Coordinates') gdf_rx.plot(ax=ax, color='blue', alpha=0.3, marker='h', markersize=24) for ind in range(gdf_rx.shape[0]): plt.text(gdf_rx['Coordinates'][ind].x+0.1, gdf_rx['Coordinates'][ind].y+0.2, sites_rx[ind], fontsize=_font) df_sites_tx['Coordinates'] = list(zip(df_sites_tx.Longitude, df_sites_tx.Latitude)) df_sites_tx['Coordinates'] = df_sites_tx['Coordinates'].apply(Point) gdf = geopandas.GeoDataFrame(df_sites_tx, geometry='Coordinates') gdf.plot(ax=ax, color='red', alpha=0.7, marker='X', markersize=18) for ind in range(gdf.shape[0]): plt.text(gdf['Coordinates'][ind].x+0.1, gdf['Coordinates'][ind].y+0.5, sites[ind], fontsize=_font) ax.set_title('Geographical location for: {}'.format(radar.name)) ax.set_xlim(*max_min_geo['lon']) ax.set_ylim(*max_min_geo['lat']) ax.set_aspect('equal') return ax