Source code for pytesmo.colormaps.load_cmap

import matplotlib.cm as cm
import matplotlib.colors as colors
import os
import json
import glob


[docs]def colormaps_path(): """Returns application's default path for storing user-defined colormaps""" return os.path.dirname(__file__)
[docs]def get_system_colormaps(): """Returns the list of colormaps that ship with matplotlib""" return [m for m in cm.datad]
[docs]def get_user_colormaps(cmap_fldr=colormaps_path()): """Returns a list of user-defined colormaps in the specified folder (defaults to standard colormaps folder if not specified).""" user_colormaps = [] for root, dirs, files in os.walk(cmap_fldr): files = glob.glob(root + '/*.cmap') for name in files: with open(os.path.join(root, name), "r") as fidin: cmap_dict = json.load(fidin) user_colormaps.append(cmap_dict.get('name', name)) return user_colormaps
[docs]def load_colormap(json_file): """Generates and returns a matplotlib colormap from the specified JSON file, or None if the file was invalid.""" colormap = None with open(json_file, "r") as fidin: cmap_dict = json.load(fidin) if cmap_dict.get('colors', None) is None: return colormap colormap_type = cmap_dict.get('type', 'linear') colormap_name = cmap_dict.get('name', os.path.basename(json_file)) if colormap_type == 'linear': colormap = colors.LinearSegmentedColormap.from_list(name=colormap_name, colors=cmap_dict['colors']) elif colormap_type == 'list': colormap = colors.ListedColormap(name=colormap_name, colors=cmap_dict['colors']) return colormap
[docs]def load(cmap_name, cmap_folder=colormaps_path()): """Returns the matplotlib colormap of the specified name - if not found in the predefined colormaps, searches for the colormap in the specified folder (defaults to standard colormaps folder if not specified).""" cmap_name_user = cmap_name + '.cmap' user_colormaps = get_user_colormaps(cmap_folder) system_colormaps = get_system_colormaps() if cmap_name_user in user_colormaps: cmap_file = os.path.join(cmap_folder, cmap_name_user) cmap = load_colormap(cmap_file) elif cmap_name in system_colormaps: return cm.get_cmap(cmap_name) else: raise ValueError('Colormap not found') return cmap