Source code for pyrad.graph.plots_aux

"""
pyrad.graph.plots_aux
=====================

Auxiliary plotting functions

.. autosummary::
    :toctree: generated/

    generate_complex_range_Doppler_title
    generate_angle_Doppler_title
    generate_complex_Doppler_title
    generate_fixed_rng_span_title
    generate_fixed_rng_title
    get_colobar_label
    get_field_name
    get_norm

"""

import numpy as np

import pyart

import matplotlib as mpl
mpl.use('Agg')

# Increase a bit font size
mpl.rcParams.update({'font.size': 16})
mpl.rcParams.update({'font.family':  "sans-serif"})


def generate_complex_range_Doppler_title(radar, field, ray, datetime_format=None):
    """
    creates the fixed range plot title

    Parameters
    ----------
    radar : radar
        The radar object
    field : str
        name of the field
    stat : str
        The statistic computed
    datetime_forat : str or None
        The date time format to use

    Returns
    -------
    titl : str
        The plot title

    """
    begin_time = pyart.graph.common.generate_radar_time_begin(radar)
    if datetime_format:
        time_str = begin_time.strftime(datetime_format)
    else:
        time_str = begin_time.isoformat() + 'Z'
    l1 = "%s azi%.1f-ele%.1f deg. %s " % (
        pyart.graph.common.generate_radar_name(radar),
        radar.azimuth['data'][ray], radar.elevation['data'][ray], time_str)
    field_name = pyart.graph.common.generate_field_name(radar, field)
    return l1 + '\n' + field_name


def generate_angle_Doppler_title(radar, field, ang, ind_rng,
                                 along_azi=True, datetime_format=None):
    """
    creates the angle-Doppler plot title

    Parameters
    ----------
    radar : radar
        The radar object
    field : str
        name of the field
    ang : float
        The fixed angle
    ind_rng : int
        the index of the fixed range
    along_azi : bool
        If true the plot is performed along azimuth, otherwise it is performed
        along elevation
    datetime_forat : str or None
        The date time format to use

    Returns
    -------
    titl : str
        The plot title

    """
    begin_time = pyart.graph.common.generate_radar_time_begin(radar)
    if datetime_format:
        time_str = begin_time.strftime(datetime_format)
    else:
        time_str = begin_time.isoformat() + 'Z'
    if along_azi:
        ang_type = 'ele'
    else:
        ang_type = 'azi'
    l1 = "%s %s%.1f deg-rng%.1f m. %s " % (
        pyart.graph.common.generate_radar_name(radar),
        ang_type, ang, radar.range['data'][ind_rng], time_str)
    field_name = pyart.graph.common.generate_field_name(radar, field)
    return l1 + '\n' + field_name


def generate_complex_Doppler_title(radar, field, ray, rng,
                                   datetime_format=None):
    """
    creates the fixed range plot title

    Parameters
    ----------
    radar : radar
        The radar object
    field : str
        name of the field
    stat : str
        The statistic computed
    datetime_forat : str or None
        The date time format to use

    Returns
    -------
    titl : str
        The plot title

    """
    begin_time = pyart.graph.common.generate_radar_time_begin(radar)
    if datetime_format:
        time_str = begin_time.strftime(datetime_format)
    else:
        time_str = begin_time.isoformat() + 'Z'
    l1 = "%s azi%.1f-ele%.1f deg rng%.1f km. %s " % (
        pyart.graph.common.generate_radar_name(radar),
        radar.azimuth['data'][ray], radar.elevation['data'][ray],
        radar.range['data'][rng]/1000., time_str)
    field_name = pyart.graph.common.generate_field_name(radar, field)
    return l1 + '\n' + field_name


def generate_fixed_rng_span_title(radar, field, stat, datetime_format=None):
    """
    creates the fixed range plot title

    Parameters
    ----------
    radar : radar
        The radar object
    field : str
        name of the field
    stat : str
        The statistic computed
    datetime_forat : str or None
        The date time format to use

    Returns
    -------
    titl : str
        The plot title

    """
    begin_time = pyart.graph.common.generate_radar_time_begin(radar)
    if datetime_format:
        time_str = begin_time.strftime(datetime_format)
    else:
        time_str = begin_time.isoformat() + 'Z'
    l1 = "%s %.1f-%.1f m %s. %s " % (
        pyart.graph.common.generate_radar_name(radar),
        np.min(radar.range['data']), np.max(radar.range['data']), stat,
        time_str)
    field_name = pyart.graph.common.generate_field_name(radar, field)
    return l1 + '\n' + field_name


def generate_fixed_rng_title(radar, field, fixed_rng, datetime_format=None):
    """
    creates the fixed range plot title

    Parameters
    ----------
    radar : radar
        The radar object
    field : str
        name of the field
    fixed_rng : float
        The fixed range [m]
    datetime_forat : str or None
        The date time format to use

    Returns
    -------
    titl : str
        The plot title

    """
    begin_time = pyart.graph.common.generate_radar_time_begin(radar)
    if datetime_format:
        time_str = begin_time.strftime(datetime_format)
    else:
        time_str = begin_time.isoformat() + 'Z'
    l1 = "%s %.1f m. %s " % (pyart.graph.common.generate_radar_name(radar),
                             fixed_rng, time_str)
    field_name = pyart.graph.common.generate_field_name(radar, field)
    return l1 + '\n' + field_name


[docs]def get_colobar_label(field_dict, field_name): """ creates the colorbar label using field metadata Parameters ---------- field_dict : dict dictionary containing field metadata field_name : str name of the field Returns ------- label : str colorbar label """ if 'standard_name' in field_dict: standard_name = field_dict['standard_name'] elif 'long_name' in field_dict: standard_name = field_dict['long_name'] else: standard_name = field_name if 'units' in field_dict: units = field_dict['units'] else: units = '?' return pyart.graph.common.generate_colorbar_label(standard_name, units)
[docs]def get_field_name(field_dict, field): """ Return a nice field name for a particular field Parameters ---------- field_dict : dict dictionary containing field metadata field : str name of the field Returns ------- field_name : str the field name """ if 'standard_name' in field_dict: field_name = field_dict['standard_name'] elif 'long_name' in field_dict: field_name = field_dict['long_name'] else: field_name = str(field) field_name = field_name.replace('_', ' ') field_name = field_name[0].upper() + field_name[1:] return field_name
def get_norm(field_name): """ Computes the normalization of the colormap, and gets the ticks and labels of the colorbar from the metadata of the field. Returns None if the required parameters are not present in the metadata Parameters ---------- field_name : str name of the field Returns ------- norm : list the colormap index ticks : list the list of ticks in the colorbar labels : list the list of labels corresponding to each tick """ norm = None ticks = None ticklabs = None field_dict = pyart.config.get_metadata(field_name) cmap = mpl.cm.get_cmap(pyart.config.get_field_colormap(field_name)) if 'boundaries' in field_dict: norm = mpl.colors.BoundaryNorm( boundaries=field_dict['boundaries'], ncolors=cmap.N) if 'ticks' in field_dict: ticks = field_dict['ticks'] if 'labels' in field_dict: ticklabs = field_dict['labels'] return norm, ticks, ticklabs