Source code for pyaerocom.plot.config

from warnings import warn

_cmap_lighttheme = "Blues"

DEFAULT_THEME = "light"
_COLOR_THEMES = dict(
    light=dict(name="light", cmap_map=_cmap_lighttheme, cmap_map_div="bwr_r", color_coastline="k"),
    dark=dict(name="dark", cmap_map="viridis", cmap_map_div="PuOr_r", color_coastline="#e6e6e6"),
)

MAP_AXES_ASPECT = 1.5
FIGSIZE_DEFAULT = (16, 10)
# text positions for annotations in scatter plots
SCAT_ANNOT_XYPOS = [
    (0.01, 0.95),
    (0.01, 0.90),
    (0.3, 0.90),
    (0.01, 0.86),
    (0.3, 0.86),
    (0.01, 0.82),
    (0.3, 0.82),
    (0.01, 0.78),
    (0.3, 0.78),
    (0.8, 0.1),
    (0.8, 0.06),
]


[docs] class ColorTheme: """Pyaerocom class specifiying plotting color theme Attributes ---------- name : str name of color theme (e.g. "light" or "dark") cmap_map : str name of colormap or colormap for map plotting color_coastline : str coastline color for map plotting cmap_map_div : str name of diverging colormap (used in map plots when plotted value range crosses 0) cmap_map_div_shifted : bool boolean specifying whether center of diverging colormaps for map plots is supposed to be shifted to 0 Example ------- Load default color theme >>> theme = ColorTheme(name="dark") >>> print(theme) pyaerocom ColorTheme name : dark cmap_map : viridis color_coastline : #e6e6e6 """ def __init__( self, name="dark", cmap_map=None, color_coastline=None, cmap_map_div=None, cmap_map_div_shifted=True, ): if not name in _COLOR_THEMES: warn("Invalid name for color theme, using default theme") name = DEFAULT_THEME self.name = name self.cmap_map = cmap_map self.cmap_map_div = cmap_map_div self.cmap_map_div_shifted = cmap_map_div_shifted self.color_coastline = color_coastline self.color_map_text = "r" self.load_default(name)
[docs] def load_default(self, theme_name="dark"): """Load default color theme Parameters ---------- theme_name : str name of default theme Raises ------ ValueError if ``theme_name`` is not a valid default theme """ if not theme_name in _COLOR_THEMES: raise ValueError( "Default theme with name %s is not available. Choose from %s" % _COLOR_THEMES ) self.from_dict(_COLOR_THEMES[theme_name])
[docs] def from_dict(self, info_dict): """Import theme information from dictionary info_dict : dict dictionary containing theme settings """ for k, v in info_dict.items(): if k in self.__dict__: self[k] = v
[docs] def to_dict(self): """Convert this object into dictionary Returns ------- dict dictionary representation of this object """ d = {} for k, v in self.__dict__.items(): d[k] = v return d
def __setitem__(self, key, value): if key in self.__dict__: self.__dict__[key] = value def __repr__(self): return self.name def __str__(self): s = "pyaerocom ColorTheme" for k, v in self.__dict__.items(): s += f"\n{k} : {v}" return s
COLOR_THEME = ColorTheme(DEFAULT_THEME)
[docs] def get_color_theme(theme_name="dark"): # Settings for colormap (use perceptually uniform colormaps) if not theme_name in _COLOR_THEMES: raise ValueError("Invalid input for theme_name, choose from %s" % _COLOR_THEMES) return ColorTheme(theme_name)