Source code for rcatool.plot.colors

"""
This module provides access to predefined (Matplotlib) or self-produced
colors and color maps.

@author Petter Lind
@date   2015-05-18
"""

import sys
from matplotlib import colors
import matplotlib.pyplot as plt
import palettable

# Self-produced colormaps
#
prct_diff = ["#006400", "#3CB371", "#8220F0", "#000096", "#0000CD", "#4169E1",
             "#1E90FF", "#00BFFF", "#A0D2FF", "#D2F5FF", "#FFFFC8", "#FFE132",
             "#FFAA00", "#FF6E00", "#FF0000", "#C80000", "#A02323", "#FF69B4",
             "#E4BD9A", "#BD885A"]
prct_diff = colors.ListedColormap(prct_diff)
prct_diff.set_over("#a14f07")
prct_diff.set_under("#42f942")
prct_diff_r = colors.ListedColormap(prct_diff.colors[::-1])

myWhYlOr = ["#DFEDED", "#E9F0D2", "#F0F2B7", "#F6F59A", "#FAF87C", "#FDFB5A",
            "#FEFE29", "#FFF500", "#FFE700", "#FFD900", "#FFCB00", "#FFBD00",
            "#FFAE00", "#FF9F00", "#FF8F00", "#FF7D00", "#FF6B00",
            "#FF5500", "#FF3A00", "#FF0000"]

prec_diff = ["#8B2500", "#983900", "#A64D00", "#B46100", "#C27500", "#CF8B0D",
             "#DAA543", "#E4BE78", "#EFD8AE", "#F9F2E4", "#E4EEE4", "#AECEAE",
             "#78AD78", "#438C43", "#0D6C0D", "#285428", "#5D3F5D", "#932A93",
             "#C915C9", "#FF00FF"]
prec_diff = colors.ListedColormap(prec_diff)
prec_diff.set_over("#fe8181")
prec_diff.set_under("#e0301e")

prec_diff_wzero = ["#8B2500", "#983900", "#A64D00", "#B46100", "#C27500",
                   "#CF8B0D", "#DAA543", "#E4BE78", "#EFD8AE", "#F9F2E4",
                   "#FFFFFF", "#FFFFFF", "#E4EEE4", "#AECEAE",
                   "#78AD78", "#438C43", "#0D6C0D", "#285428", "#5D3F5D",
                   "#5B7AD7", "#2D50B9", "#233E90", "#142352"]
prec_diff_wzero = colors.ListedColormap(prec_diff_wzero)
prec_diff_wzero.set_over("#142352")
prec_diff_wzero.set_under("#e0301e")

myGrBuPu_long = ["White", "#edfac2", "#cdffcd", "#99f0b2", "#53bd9f",
                 "#32a696", "#3296b4", "#0570b0", "#05508c", "#0a1f96",
                 "#2c0246", "#6a2c5a"]
myGrBuPu_long = colors.ListedColormap(myGrBuPu_long)
myGrBuPu_long.set_over("#ff00ff")
myGrBuPu_long.set_under("White")

myGrBuPu = ["#edfac2", "#cdffcd", "#99f0b2", "#53bd9f", "#32a696", "#3296b4",
            "#0570b0", "#05508c", "#0a1f96", "#2c0246", "#6a2c5a", "#ff99ac",
            "#ff4d6e", "#ffcccc", "#ffffcc"]
myGrBuPu = colors.ListedColormap(myGrBuPu)
myGrBuPu.set_over("#f7f056")
myGrBuPu.set_under("White")

topography = ["#79B2DE", "#ACD0A5", "#94BF8B", "#A8C68F", "#BDCC96",
              "#D1D7AB", "#E1E4B5", "#EFEBC0", "#E8E1B6", "#DED6A3",
              "#D3CA9D", "#CAB982", "#C3A76B", "#B9985A", "#AA8753",
              "#AC9A7C", "#BAAE9A", "#CAC3B8", "#E0DED8"]


# Palettable colors (more info: https://jiffyclub.github.io/palettable/)
#
# Greens
greens_seq = palettable.colorbrewer.get_map('Greens',
                                            'sequential', 8).mpl_colormap

# Greys
greys_seq = palettable.colorbrewer.get_map('Greys',
                                           'sequential', 8).mpl_colormap

# Diverging brown-blue-green
BrBg_div = palettable.colorbrewer.get_map('BrBg', 'diverging', 9).mpl_colormap

# ??
unknown = ["#DFEDED", "#E9F0D2", "#F0F2B7", "#F6F59A", "#FAF87C", "#FDFB5A",
           "#FEFE29", "#FFF500", "#FFE700", "#FFD900", "#FFCB00", "#FFBD00",
           "#FFAE00", "#FF9F00", "#FF8F00", "#FF7D00", "#FF6B00", "#FF5500",
           "#FF3A00", "#FF0000"]
unknown = colors.ListedColormap(unknown)


# Good for line plots
set3 = palettable.colorbrewer.get_map('Set3', 'qualitative', 11).mpl_colors
set2 = palettable.colorbrewer.get_map('Set2', 'qualitative', 8).mpl_colors
set1 = palettable.colorbrewer.get_map('Set1', 'qualitative', 9).mpl_colors

# Misc
almost_black = '#262626'
magenta = "#FF00FF"
green = "#00EE00"

color_dict =\
        {
            'topography': topography,
            'prec_diff': prec_diff,
            'prec_diff_wzero': prec_diff_wzero,
            'myGrBuPu': myGrBuPu,
            'myGrBuPu_long': myGrBuPu_long,
            'prct_diff': prct_diff,
            'prct_diff_r': prct_diff_r,
            'myWhYlOr': myWhYlOr,
            'set1': set1,
            'set2': set2,
            'set3': set3,
            'unknown': unknown
        }
single_color_dict = \
        {
            'green': green,
            'magenta': magenta,
            'almost_black': almost_black
        }


[docs] def getcolormap(cmap_name, custom=False): ''' Function to retrieve colormap, either customized (custom=True) or available through Matplotlib predefined colormaps. Parameters ---------- cmap_name: string String, giving name of colormap to be retrieved. custom: Boolean Logical indicating self-produced (custom=True) or Matplotlib colormap. Returns ------- cmap: Matplotlib colormap object ''' if custom: cmap = color_dict[cmap_name] else: msg = ("Error retrieving colormap: {}.\nMake sure it exists in " "Matplotlib's predefined colormaps, or change " "accordingly.").format(cmap_name) try: cmap = plt.cm.get_cmap(cmap_name) except ValueError: print(msg) sys.exit return cmap
[docs] def getsinglecolor(color_name): ''' Function to retrieve single custom color. Parameters ---------- color_name: string String, giving name of color to be retrieved. Returns ------- color: Matplotlib color object ''' try: color = single_color_dict[color_name] except ValueError: print("Color {} does not exist in single color dictionary.". format(color)) sys.exit return color
[docs] def norm_colors(bounds, ncolors, clip=False): """ In addition to min and max of levels, this function takes as arguments boundaries between which data is to be mapped. The colors are then linearly distributed between these 'bounds'. """ return palettable.palette.BoundaryNorm(boundaries=bounds, ncolors=ncolors, clip=clip)