Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
066431b
ported from previous PR
timtreis Aug 15, 2024
6cd74ed
Added images
timtreis Aug 15, 2024
835114a
added two images from runner
timtreis Aug 15, 2024
c00caaa
silenced method=matplotlib logging
timtreis Aug 15, 2024
7c6cb66
Removed unneccecary alpha-cropping on strings
timtreis Aug 15, 2024
b58bbcb
Removed color randomisation if na_color would be used
timtreis Aug 15, 2024
7dd03b0
Reverted mistake
timtreis Aug 15, 2024
181458c
Fixed check for hex value
timtreis Aug 15, 2024
ef7813c
EOD
timtreis Aug 15, 2024
c95575a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2024
88df6f1
fixed na_status logic
timtreis Aug 23, 2024
ae74824
resoled merge conflict
timtreis Aug 23, 2024
4a1d40f
Modified based on fact that na_color is sanited after type-check
timtreis Aug 23, 2024
c9f3065
fixed cmap list bug
timtreis Aug 23, 2024
26e8771
fixed alpha control for infill/outline in labels
timtreis Aug 23, 2024
44cb853
fixing tests
timtreis Aug 23, 2024
f701546
fixing tests
timtreis Aug 23, 2024
9c2bea8
added contour to test
timtreis Aug 23, 2024
52ff14a
removed incorrect parametrisation
timtreis Aug 23, 2024
d691243
added contour again
timtreis Aug 23, 2024
92a765e
Added two images from runner
timtreis Aug 25, 2024
655bc6b
fixed bug when rasterisation
timtreis Aug 25, 2024
cdb3bb7
added images from runner
timtreis Aug 25, 2024
cf4f62f
attempt at fixing outline inprecision
timtreis Aug 26, 2024
0f9271e
Reversed alpha misunderstanding
timtreis Aug 26, 2024
dd4c426
Renamed and fixed test
timtreis Aug 26, 2024
fb48c2c
added missing argument to test
timtreis Aug 26, 2024
75eb7e1
added missing image from runner
timtreis Aug 26, 2024
d376400
made test independent
timtreis Aug 26, 2024
53bcfe4
simple test for _sanitise_na_color
timtreis Aug 26, 2024
ec05d7c
Removed unused functions; added test for _get_subplots
timtreis Aug 26, 2024
cc0819c
Corrected alpha value, waiting for runner pics
timtreis Aug 26, 2024
55e7191
Updated with pic from runner
timtreis Aug 26, 2024
9ae69e9
Also adjusted alpha in render_shapes
timtreis Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,18 +10,28 @@ and this project adheres to [Semantic Versioning][].

## [0.2.x] - tbd

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)
- Replaced `outline` parameter in `render_labels` with alpha-based logic (#323)
- Lowered RMSE-threshold for plot-based tests from 60 to 45 (#323)
- Minor fixes for several tests as a result of the threshold change (#323)

### Changed

-

### Fixed

-

## [0.2.4] - 2024-08-07

### Added

- Added utils function for 0-transparent cmaps (#302)

### Fixed

- Took RNG out of categorical label test (#306)
- Performance bug when plotting shapes (#298)
- scale parameter was ignored for single-scale images (#301)
Expand Down
129 changes: 65 additions & 64 deletions src/spatialdata_plot/pl/basic.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,9 @@
)
from spatialdata_plot.pp.utils import _verify_plotting_tree

# replace with
# from spatialdata._types import ColorLike
# once https://github.com/scverse/spatialdata/pull/689/ is in a release
ColorLike = Union[tuple[float, ...], str]


Expand DownExpand Up@@ -158,11 +161,10 @@ def render_shapes(
fill_alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
outline: bool = False,
na_color: ColorLike | None = "default",
outline_width: float | int = 1.5,
outline_color: str | list[float] = "#000000ff",
outline_alpha: float | int = 1.0,
outline_alpha: float | int = 0.0,
cmap: Colormap | str | None = None,
norm: bool | Normalize = False,
scale: float | int = 1.0,
Expand DownExpand Up@@ -201,19 +203,17 @@ def render_shapes(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If element is None, broadcasting behaviour is attempted (use the same values for
all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline : bool, default False
If `True`, a border around the shape elements is plotted.
outline_width : float | int, default 1.5
Width of the border.
outline_color : str | list[float], default "#000000ff"
Color of the border. Can either be a named color ("red"), a hex representation ("#000000ff") or a list of
floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0).
outline_alpha : float | int, default 1.0
Alpha value for the outline of shapes.
outline_alpha : float | int, default 0.0
Alpha value for the outline of shapes. Invisible by default.
cmap : Colormap | str | None, optional
Colormap for discrete or continuous annotations using 'color', see :class:`matplotlib.colors.Colormap`.
norm : bool | Normalize, default False
Expand DownExpand Up@@ -249,7 +249,6 @@ def render_shapes(
palette=palette,
color=color,
na_color=na_color,
outline=outline,
outline_alpha=outline_alpha,
outline_color=outline_color,
outline_width=outline_width,
Expand All@@ -263,16 +262,15 @@ def render_shapes(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

outline_params = _set_outline(outline, outline_width, outline_color)
outline_params = _set_outline(outline_alpha > 0, outline_width, outline_color)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_shapes"] = ShapesRenderParams(
element=element,
color=param_values["color"],
Expand DownExpand Up@@ -301,7 +299,7 @@ def render_points(
alpha: float | int = 1.0,
groups: list[str] | str | None = None,
palette: list[str] | str | None = None,
na_color: ColorLike | None = "lightgrey",
na_color: ColorLike | None = "default",
cmap: Colormap | str | None = None,
norm: None | Normalize = None,
size: float | int = 1.0,
Expand DownExpand Up@@ -339,7 +337,7 @@ def render_points(
Palette for discrete annotations. List of valid color names that should be used for the categories. Must
match the number of groups. If `element` is `None`, broadcasting behaviour is attempted (use the same values
for all elements). If groups is provided but not palette, palette is set to default "lightgray".
na_color : ColorLike | None, default "lightgrey"
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
Expand DownExpand Up@@ -389,14 +387,13 @@ def render_points(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_points"] = PointsRenderParams(
element=element,
color=param_values["color"],
Expand All@@ -422,7 +419,7 @@ def render_images(
channel: list[str] | list[int] | str | int | None = None,
cmap: list[Colormap | str] | Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
na_color: ColorLike | None = "default",
palette: list[str] | str | None = None,
alpha: float | int = 1.0,
percentiles_for_norm: tuple[float, float] | None = None,
Expand DownExpand Up@@ -452,8 +449,10 @@ def render_images(
norm : Normalize | None, optional
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
Applies to all channels if set.
na_color : ColorLike | None, default (0.0, 0.0, 0.0, 0.0)
Color to be used for NA values. Accepts color-like values (string, hex, RGB(A)).
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
palette : list[str] | str | None
Palette to color images. The number of palettes should be equal to the number of channels.
alpha : float | int, default 1.0
Expand DownExpand Up@@ -494,27 +493,32 @@ def render_images(
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())

cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
for element, param_values in params_dict.items():
# cmap_params = _prepare_cmap_norm(
# cmap=params_dict[element]["cmap"],
# norm=norm,
# na_color=params_dict[element]["na_color"], # type: ignore[arg-type]
# **kwargs,
# )
cmap_params: list[CmapParams] | CmapParams
if isinstance(cmap, list):
cmap_params = [
_prepare_cmap_norm(
cmap=c,
norm=norm,
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
na_color=param_values["na_color"],
**kwargs,
)
for c in cmap
]

else:
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
sdata.plotting_tree[f"{n_steps+1}_render_images"] = ImageRenderParams(
element=element,
channel=param_values["channel"],
Expand All@@ -536,12 +540,11 @@ def render_labels(
color: str | None = None,
groups: list[str] | str | None = None,
contour_px: int | None = 3,
outline: bool = False,
palette: list[str] | str | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | None = None,
na_color: ColorLike | None = (0.0, 0.0, 0.0, 0.0),
outline_alpha: float | int = 1.0,
na_color: ColorLike | None = "default",
outline_alpha: float | int = 0.0,
fill_alpha: float | int = 0.4,
scale: str | None = None,
table_name: str | None = None,
Expand DownExpand Up@@ -576,16 +579,16 @@ def render_labels(
contour_px : int, default 3
Draw contour of specified width for each segment. If `None`, fills entire segment, see:
func:`skimage.morphology.erosion`.
outline : bool, default False
Whether to plot boundaries around segmentation masks.
cmap : Colormap | str | None
Colormap for continuous annotations, see :class:`matplotlib.colors.Colormap`.
norm : Normalize | None
Colormap normalization for continuous annotations, see :class:`matplotlib.colors.Normalize`.
na_color : ColorLike | None
Color to be used for NAs values, if present.
outline_alpha : float | int, default 1.0
Alpha value for the outline of the labels.
na_color : ColorLike | None, default "default" (gets set to "lightgray")
Color to be used for NAs values, if present. Can either be a named color ("red"), a hex representation
("#000000ff") or a list of floats that represent RGB/RGBA values (1.0, 0.0, 0.0, 1.0). When None, the values
won't be shown.
outline_alpha : float | int, default 0.0
Alpha value for the outline of the labels. Invisible by default.
fill_alpha : float | int, default 0.3
Alpha value for the fill of the labels.
scale : str | None
Expand DownExpand Up@@ -615,7 +618,6 @@ def render_labels(
groups=groups,
na_color=na_color,
norm=norm,
outline=outline,
outline_alpha=outline_alpha,
palette=palette,
scale=scale,
Expand All@@ -625,20 +627,19 @@ def render_labels(
sdata = self._copy()
sdata = _verify_plotting_tree(sdata)
n_steps = len(sdata.plotting_tree.keys())
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=na_color, # type: ignore[arg-type]
**kwargs,
)

for element, param_values in params_dict.items():
cmap_params = _prepare_cmap_norm(
cmap=cmap,
norm=norm,
na_color=param_values["na_color"], # type: ignore[arg-type]
**kwargs,
)
sdata.plotting_tree[f"{n_steps+1}_render_labels"] = LabelsRenderParams(
element=element,
color=param_values["color"],
groups=param_values["groups"],
contour_px=param_values["contour_px"],
outline=param_values["outline"],
cmap_params=cmap_params,
palette=param_values["palette"],
outline_alpha=param_values["outline_alpha"],
Expand Down
Loading