Source code for kwave.utils.colormap
from typing import Optional
import numpy as np
from beartype import beartype as typechecker
from jaxtyping import Float
from matplotlib.colors import ListedColormap
[docs]
@typechecker
def get_color_map(num_colors: Optional[int] = None) -> ListedColormap:
"""
Returns the default color map used for display and visualisation across
the k-Wave Toolbox. Zero values are displayed as white, positive values
are displayed as yellow through red to black, and negative values are
displayed as light to dark blue-greys. If no value for `num_colors` is
provided, `cm` will have 256 colors.
Args:
num_colors: The number of colors in the color map (default is 256).
Returns:
A three-column color map matrix which can be applied using colormap.
"""
if num_colors is None:
neg_pad = 48
num_colors = 256
else:
neg_pad = int(round(48 * num_colors / 256))
# define colour spectrums
neg = bone(num_colors // 2 + neg_pad)
neg = neg[neg_pad:, :]
pos = np.flipud(hot(num_colors // 2))
colors = np.vstack([neg, pos])
return ListedColormap(colors)
[docs]
@typechecker
def hot(m: int) -> Float[np.ndarray, "N 3"]:
"""
Generate a hot colormap of length m.
The colormap consists of a progression from black to red, yellow, and white.
Args:
m: The length of the colormap.
Returns:
An m-by-3 array containing the hot colormap.
"""
n = int(np.fix(3 / 8 * m))
r = np.concatenate([np.arange(1, n + 1) / n, np.ones(m - n)])
g = np.concatenate([np.zeros(n), np.arange(1, n + 1) / n, np.ones(m - 2 * n)])
b = np.concatenate([np.zeros(2 * n), np.arange(1, m - 2 * n + 1) / (m - 2 * n)])
return np.hstack([r[:, None], g[:, None], b[:, None]])
[docs]
@typechecker
def bone(m: int) -> Float[np.ndarray, "N 3"]:
"""
Returns an m-by-3 matrix containing a "bone" colormap.
Args:
m: The number of rows in the colormap.
Returns:
An m-by-3 matrix containing the colormap.
"""
return (7 * gray(m) + np.fliplr(hot(m))) / 8
[docs]
@typechecker
def gray(m: int) -> Float[np.ndarray, "N 3"]:
"""
Returns an M-by-3 matrix containing a grayscale colormap.
Args:
m: The length of the colormap.
Returns:
An M-by-3 matrix containing the grayscale colormap.
"""
g = np.arange(m) / max(m - 1, 1)
g = g[:, None]
return np.hstack([g, g, g])