Skip to content

Commit a50c803

Browse files
committed
Add hex support for base cmaps definition with sequential_cmaps()
1 parent 8f44f5f commit a50c803

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

panel/app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from panel.layout.gridstack import GridStack
1313

1414
import simdec as sd
15-
from simdec.visualization import colormap_from_single_color
15+
from simdec.visualization import single_color_to_colormap
1616

1717

1818
# panel app
@@ -178,7 +178,7 @@ def create_color_pickers(states, colors):
178178

179179
@pn.cache
180180
def palette(res, colors_picked):
181-
cmaps = [colormap_from_single_color(color_picked) for color_picked in colors_picked]
181+
cmaps = [single_color_to_colormap(color_picked) for color_picked in colors_picked]
182182
return sd.palette(res.states[::-1], cmaps=cmaps[::-1])
183183

184184

src/simdec/visualization.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import functools
12
import itertools
23
from typing import Literal
34

@@ -13,6 +14,11 @@
1314

1415

1516
SEQUENTIAL_PALETTES = [
17+
"#DC267F",
18+
"#E8EA2F",
19+
"#26DCD1",
20+
"#C552E4",
21+
"#3F45D0",
1622
"Oranges",
1723
"Purples",
1824
"Reds",
@@ -34,7 +40,20 @@
3440
]
3541

3642

37-
def colormap_from_single_color(
43+
@functools.cache
44+
def sequential_cmaps():
45+
cmaps = []
46+
for cmap in SEQUENTIAL_PALETTES:
47+
try:
48+
cmap_ = mpl.colormaps[cmap]
49+
except KeyError:
50+
color = mpl.colors.hex2color(cmap)
51+
cmap_ = single_color_to_colormap(color)
52+
cmaps.append(cmap_)
53+
return cmaps
54+
55+
56+
def single_color_to_colormap(
3857
rgba_color: list[float] | str, *, factor: float = 0.5
3958
) -> mpl.colors.LinearSegmentedColormap:
4059
"""Create a linear colormap using a single color."""
@@ -92,7 +111,7 @@ def palette(
92111
"""
93112
n_cmaps = states[0]
94113
if cmaps is None:
95-
cmaps = [mpl.colormaps[cmap] for cmap in SEQUENTIAL_PALETTES[:n_cmaps]]
114+
cmaps = sequential_cmaps()[:n_cmaps]
96115
else:
97116
cmaps = cmaps[:n_cmaps]
98117
if len(cmaps) != n_cmaps:

0 commit comments

Comments
 (0)