Source code for quantify_core.visualization.color_utilities

# Repository:
# Licensed according to the LICENCE file on the main branch
"""Module containing utilities for color manipulation"""
from __future__ import annotations

import colorsys

import matplotlib.colors as mplc
import numpy as np

[docs] def set_hlsa( color, h: float | None = None, l: float | None = None, s: float | None = None, a: float | None = None, to_hex: bool = False, ) -> tuple: """ Create an RGB(A) color specification from HLS(A) values. Accepts a Matplotlib HLS(A) color specification (hue/lightness/saturation and optionally alpha value) and returns an RGB (red/green/blue) color with the specified HLS(A) values. .. seealso:: :ref:`howto-visualization-custom-colormaps` Parameters ---------- h The value of the first hue. l The lightness value. s The saturation intensity. a Alpha bending value to_hex If `True`, returns integers in `0..255` interval, otherwise floats in `0..1` range. Returns ------- : Color RGB(A) """ clip = lambda x: np.clip(x, 0, 1) rgb = mplc.to_rgb(color) hls = colorsys.rgb_to_hls(*mplc.to_rgb(rgb)) new_hls = (old if new is None else clip(new) for old, new in zip(hls, (h, l, s))) col = colorsys.hls_to_rgb(*new_hls) # append alpha to tuple col = col if a is None else col + (clip(a),) # convert to int 255 range col = col if not to_hex else tuple(round(255 * x) for x in col) return col
def make_fadded_colors( num=5, color="#1f77b4", min_alpha=0.3, sat_power=2, to_hex=False ): hls = colorsys.rgb_to_hls(*mplc.to_rgb(mplc.to_rgb(color))) sat_vals = (np.linspace(1.0, 0.0, num) ** sat_power) * hls[2] alpha_vals = np.linspace(1.0, min_alpha, num) colors = tuple( set_hlsa(color, s=s, a=a, to_hex=to_hex) for s, a in zip(sat_vals, alpha_vals) ) return colors