Source code for geoips.plugins.modules.colormappers.matplotlib_linear_norm

# # # Distribution Statement A. Approved for public release. Distribution unlimited.
# # #
# # # Author:
# # # Naval Research Laboratory, Marine Meteorology Division
# # #
# # # This program is free software: you can redistribute it and/or modify it under
# # # the terms of the NRLMMD License included with this program. This program is
# # # distributed WITHOUT ANY WARRANTY; without even the implied warranty of
# # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the included license
# # # for more details. If you did not receive the license, for more information see:
# # # https://github.com/U-S-NRL-Marine-Meteorology-Division/

"""Matplotlib information for standard imagery with an existing system colormap."""
import logging

from matplotlib.colors import Normalize
from matplotlib import cm

from geoips.image_utils.colormap_utils import from_ascii
from geoips.geoips_utils import find_ascii_palette
from geoips.interfaces import colormappers

LOG = logging.getLogger(__name__)

interface = "colormappers"
family = "matplotlib"
name = "matplotlib_linear_norm"


[docs]def call( data_range=None, cmap_name="Greys", cmap_source="matplotlib", cmap_path=None, create_colorbar=True, cbar_label=None, cbar_ticks=None, cbar_tick_labels=None, cbar_spacing="proportional", cbar_full_width=False, colorbar_kwargs=None, set_ticks_kwargs=None, set_label_kwargs=None, ): """Set the matplotlib colors information for matplotlib linear norm cmaps. This information used in both colorbar and image production throughout GeoIPS image output specifications. Parameters ---------- data_range : list, default=None * [min_val, max_val], matplotlib.colors.Normalize(vmin=min_val, vmax=max_val) * If data_range not specified, vmin and vmax both None. cmap_name : str, default="Greys" * Specify the name of the resulting matplotlib colormap. * If no ascii_path specified, will use builtin matplotlib colormap of name cmap_name. ascii_path : str, default=None * Specify full path to ASCII palette to convert to matplotlib colormap. * If not specified, use internal matplotlib colormap "cmap_name". cbar_label : str, default=None * Positional parameter passed to cbar.set_label * If specified, use cbar_label string as colorbar label. create_colorbar : bool, default=True * Specify whether the image should contain a colorbar or not. cbar_ticks : list, default=None * Positional parameter passed to cbar.set_ticks * Specify explicit list of ticks to include for colorbar. * None indicates ticks at int(min) and int(max) values cbar_tick_labels : list, default=None * "labels" argument to pass to cbar.set_ticks. * can also specify directly within "set_ticks_kwargs" cbar_spacing : string, default="proportional" * "spacing" argument to pass to fig.colorbar * can also specify directly within "colorbar_kwargs" cbar_full_width : bool, default=True * Extend the colorbar across the full width of the image. colorbar_kwargs : dict, default=None * keyword arguments to pass through directly to "fig.colorbar" set_ticks_kwargs : dict, default=None * keyword arguments to pass through directly to "cbar.set_ticks" set_label_kwargs : dict, default=None * keyword arguments to pass through directly to "cbar.set_label" Returns ------- mpl_colors_info : dict * Specifies matplotlib Colors parameters for use in both plotting and colorbar generation See Also -------- :ref:`api` See geoips.image_utils.mpl_utils.create_colorbar for field descriptions. """ min_val = None max_val = None if data_range is not None: min_val = data_range[0] max_val = data_range[1] if cmap_source == "matplotlib": try: mpl_cmap = cm.get_cmap(cmap_name) except ValueError: raise ValueError("Colormap {cmap_name} not found in source {cmap_source}") elif cmap_source == "geoips": cmap_plugin = colormappers.get_plugin(cmap_name) # Just get the cmap out of mpl_colors_info to use here. mpl_cmap = cmap_plugin()["cmap"] elif cmap_source == "ascii": if cmap_path is not None: mpl_cmap = from_ascii(cmap_path, cmap_name=cmap_name) else: try: ascii_path = find_ascii_palette(cmap_name) mpl_cmap = from_ascii(ascii_path, cmap_name=cmap_name) except ValueError: raise ValueError( "Colormap {cmap_name} not found in source {cmap_source}" ) else: raise ValueError( "Uknown colormap source {cmap_source}, must be one of " "'matplotlib', 'geoips', or 'ascii'" ) LOG.info("Setting norm") mpl_norm = Normalize(vmin=min_val, vmax=max_val) if cbar_ticks: mpl_ticks = cbar_ticks elif min_val is not None: mpl_ticks = [int(min_val), int(max_val)] else: mpl_ticks = None if cbar_tick_labels is None: mpl_tick_labels = mpl_ticks # Must be uniform or proportional, None not valid for Python 3 mpl_boundaries = None mpl_colors_info = { "cmap": mpl_cmap, "norm": mpl_norm, "boundaries": mpl_boundaries, "colorbar": create_colorbar, "cbar_ticks": mpl_ticks, "cbar_tick_labels": mpl_tick_labels, "cbar_label": cbar_label, "cbar_spacing": cbar_spacing, "cbar_full_width": cbar_full_width, "colorbar_kwargs": colorbar_kwargs, "set_ticks_kwargs": set_ticks_kwargs, "set_label_kwargs": set_label_kwargs, } return mpl_colors_info