Map Data Plots


Convection Maps

Map plots are a way to visualize data from a MAP file of SuperDARN radar data. Please read RST documentation on how to process MAP files from GRID files.

Map field descriptions can be found here. pyDARN uses a enum object to select different common parameters to plot in a MAP file:

Name parameter name Map field name
Fitted Velocity MapParams.FITTED_VELOCITIES see Fitted Velocities section
Modeled Velocities MapParams.MODEL_VELOCITIES model.vel.median
Raw Velocities MapParams.RAW_VELOCITIES vector.vel.median
Power MapParams.POWER vector.pwr.median
Spectral Width MapParams.SPECTRAL_WIDTH vector.wdt.median

for a given start_time or record number projected onto a polar plot in AACGMv2 coordinates.

Currently, map plots in pyDARN get geomagnetic positions of the mapped data in mlon and mlat from the MAP file, which uses AACGMv2 coordinates.

Fitted Velocities

Fitted velocities are velocity vectors which represent the fitted convection pattern. They are entirely in the direction of the fitted convection flow and so can be fairly different to line-of-sight velocities, but still ultimately constrained by them.

Fitted velocity vectors are by default only calculated at the same positions of the line-of-sight vectors, but fit vectors at an arbitrary position can be obtained by using the calculated_fitted_velocities function in map.py.

Basic usage

pyDARN and pyplot need to be imported and the desired MAP file needs to be read in:

import matplotlib.pyplot as plt
import pydarn

#Read in Map file using SuperDARNRead, then read_map
file = "path/to/grid/file"
SDarn_read = pydarn.SuperDARNRead(file)
map_data = SDarn_read.read_map()

With the map data loaded as a list of dictionaries (map_data variable in above example), you may now call the plot_mapdata method. Make sure you tell the method what time, in datetime format, or record number (numbered from first recorded in file, counting from 0):

map_rtn = pydarn.Maps.plot_mapdata(map_data, record=150)
plt.show()

In this example, the record at 150 was plotted with the defaulted parameter, MapParams.FITTED_VELOCITIES (fitted velocities):

You might have noticed that the variable map_rtn in the examples above actually holds some information. This dictionary contains the AACGM latitude and longitude of the mapped vectors plotted:

map_rtn = pydarn.Maps.plot_mapdata(map_data, start_time=stime)
print(map_rtn.keys())

Additional options

Here is a list of all the current options than can be used with plot_mapdata

Option Action
record=(int) Record number to plot
start_time=(datetime.datetime) The start time of the record to plot
time_delta=(int) How close to the start time to be to the start time of the record
parameter=(Enum) Specify the required parameter described above i.e. pydarn.MapParams.FITTED_VELOCITY
lowlat=(int) Control the lower latitude boundary of the plot (default 30/-30 AACGM lat)
len_factor=(int) Normalisation factor for the length of the vectors on the plot
boundary=(bool) Boolean to show the Field-of-View of the radar(s)
cmap=matplotlib.cm A matplotlib color map object. Will override the pyDARN defaults for chosen parameter
zmin=(int) Minimum data value for colouring
zmax=(int) Maximum data value for colouring
color_vectors=(bool) Choose if the vectors are plotted with corresponding color map (True), or in black
colorbar=(bool) Set true to plot a colorbar (default: True)
colorbar_label=(string) Label for the colour bar (requires colorbar to be true)
contour_colorbar=(bool) Set True to show color bar for contour color map (default:True if contour_fill=True)
title=(str) To add a title to the plot
hmb=(bool) Set to True to include the Heppnar-Maynard Boundary on the plot
imf_dial=(bool) Show the IMF data as a clock angle dial (default True)
map_info=(bool) Show selected map file data (e.g. cross polar cap potential) (default True)
contour_levels=(list: floats) Set custom levels for contours to appear at
contour_color=(str) Set custom color for contour lines (default 'dim grey')
contour_linewidths=(float) Set custom line width for contour lines (default 0.8)
contour_fill=(bool) Choose to use filled contours, default is False to plot contour lines only
contour_colorbar=(bool) If contour_fill=True, color bar will be displayed (default True)
contour_fill_cmap=(str) If contour_fill=True, color map can be selected (default 'RdBu')
contour_colorbar_label=(str) If contour_fill and contour_colorbar= True, set custom contour colorbar label
pot_minmax_color=(str) Choose color of minimum and maximum potential markers
radar_location=(bool) Show locations of radars used in the map file
reference_vector=(int) If value given, reference vector with given value is plotted, remove using False or 0
coastline=(bool) Show coastlines under convection data (uses Cartopy)

More **kwargs can be used to customise the display of the radars field-of-view if boundary=True

The following is an example of the customization available:

import matplotlib.pyplot as plt 
import pydarn

map_file = "20150310.n.map"
map_data = pydarn.SuperDARNRead().read_dmap(map_file)

pydarn.Maps.plot_mapdata(map_data, record=150, 
                         parameter=pydarn.MapParams.FITTED_VELOCITY,
                         lowlat=60, colorbar_label='Velocity m/s',
                         contour_fill = True,
                         contour_fill_cmap= 'RdBu',
                         contour_colorbar = True,
                         contour_colorbar_label='Potential (kV)',
                         pot_minmax_color = 'r',
                         map_info=True, imf_dial=True, hmb=True)

plt.show()

Map Time-Series Plots

Values within a map file can also be plotted using the plot_time_series method.

import pydarn
import datetime as dt
import matplotlib.pyplot as plt

file_path = "path/to/map/file.map"
data = pydarn.SuperDARNRead().read_dmap(file_path)
start_time = dt.datetime(2019,4,21,11,0)
end_time = dt.datetime(2019,4,21,13,0)
pydarn.Maps.plot_time_series(data, parameter=pydarn.TimeSeriesParams.IMF_BY,
                             start_time=start_time, end_time=end_time, color='r')
plt.show()

Specific values available to be plotted are:

Name parameter name
Number of vectors TimeSeriesParams.NUM_VECTORS
IMF By TimeSeriesParams.IMF_BY
IMF Bz TimeSeriesParams.IMF_BZ
IMF Bx TimeSeriesParams.IMF_BX
IMF Vx TimeSeriesParams.IMF_VX
IMF Tilt TimeSeriesParams.IMF_TILT
KP index TimeSeriesParams.KP
Minimum Latitude TimeSeriesParams.LATMIN
Error in model fitting TimeSeriesParams.ERR
Cross Polar Cap Potential TimeSeriesParams.CPP

Also available are time-series plots for electric potential parameter = pydarn.TimeSeriesParams.POT at a given latitude longitude position.

import pydarn
import datetime as dt
import matplotlib.pyplot as plt

mapfile = '/Users/carley/Documents/data/maps/20220101.n.map'
SDarn_read = pydarn.SuperDARNRead(mapfile)
map_data = SDarn_read.read_map()

# Coordinates of interest, as mlat/mlon pairs. 
#This example keeps mlon the same but changes mlat, like a keogram
mlats = 75
mlons = 110

pydarn.Maps.plot_time_series(map_data,
                             parameter = pydarn.TimeSeriesParams.POT,
                             start_time = dt.datetime(2022,1,1,0,0),
                             end_time = dt.datetime(2022,1,1,6,0),
                             potential_position = [mlons, mlats])
plt.show()