From 797c33598eb7f02979add1a54deb8423edba0c46 Mon Sep 17 00:00:00 2001 From: Tim Treis Date: Sat, 15 Nov 2025 14:33:49 +0100 Subject: [PATCH 1/2] bugfix + test --- src/spatialdata_plot/pl/render.py | 39 ++++++++++++- ...oints_datashader_colors_from_table_obs.png | Bin 0 -> 25398 bytes tests/pl/test_render_points.py | 53 ++++++++++++++++++ 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 tests/_images/Points_datashader_colors_from_table_obs.png diff --git a/src/spatialdata_plot/pl/render.py b/src/spatialdata_plot/pl/render.py index 6ada5397..76e57d82 100644 --- a/src/spatialdata_plot/pl/render.py +++ b/src/spatialdata_plot/pl/render.py @@ -570,6 +570,23 @@ def _render_points( coords += [col_for_color] points = points[coords].compute() + added_color_from_table = False + if col_for_color is not None and col_for_color not in points.columns: + color_values = get_values( + value_key=col_for_color, + sdata=sdata_filt, + element_name=element, + table_name=table_name, + table_layer=table_layer, + ) + points = points.merge( + color_values[[col_for_color]], + how="left", + left_index=True, + right_index=True, + ) + added_color_from_table = True + if groups is not None and col_for_color is not None: if col_for_color in points.columns: points_color_values = points[col_for_color] @@ -588,6 +605,14 @@ def _render_points( if len(points) <= 0: raise ValueError(f"None of the groups {groups} could be found in the column '{col_for_color}'.") + n_points = len(points) + points_pd_with_color = points + points_for_model = ( + points_pd_with_color.drop(columns=[col_for_color], errors="ignore") + if added_color_from_table and col_for_color is not None + else points_pd_with_color + ) + # we construct an anndata to hack the plotting functions if table_name is None: adata = AnnData( @@ -617,7 +642,7 @@ def _render_points( # Convert back to dask dataframe to modify sdata transformation_in_cs = sdata_filt.points[element].attrs["transform"][coordinate_system] - points = dask.dataframe.from_pandas(points, npartitions=1) + points = dask.dataframe.from_pandas(points_for_model, npartitions=1) sdata_filt.points[element] = PointsModel.parse(points, coordinates={"x": "x", "y": "y"}) # restore transformation in coordinate system of interest set_transformation( @@ -658,6 +683,16 @@ def _render_points( render_type="points", ) + if added_color_from_table and col_for_color is not None: + points_with_color_dd = dask.dataframe.from_pandas(points_pd_with_color, npartitions=1) + sdata_filt.points[element] = PointsModel.parse(points_with_color_dd, coordinates={"x": "x", "y": "y"}) + set_transformation( + element=sdata_filt.points[element], + transformation=transformation_in_cs, + to_coordinate_system=coordinate_system, + ) + points = points_with_color_dd + # color_source_vector is None when the values aren't categorical if color_source_vector is None and render_params.transfunc is not None: color_vector = render_params.transfunc(color_vector) @@ -669,7 +704,7 @@ def _render_points( method = render_params.method if method is None: - method = "datashader" if len(points) > 10000 else "matplotlib" + method = "datashader" if n_points > 10000 else "matplotlib" if method != "matplotlib": # we only notify the user when we switched away from matplotlib diff --git a/tests/_images/Points_datashader_colors_from_table_obs.png b/tests/_images/Points_datashader_colors_from_table_obs.png new file mode 100644 index 0000000000000000000000000000000000000000..15979822d53c1b190ebd3a4af8620178dc1da52f GIT binary patch literal 25398 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 BNXh^J literal 0 HcmV?d00001 diff --git a/tests/pl/test_render_points.py b/tests/pl/test_render_points.py index 71a6c4e3..c8906360 100644 --- a/tests/pl/test_render_points.py +++ b/tests/pl/test_render_points.py @@ -178,6 +178,32 @@ def test_plot_datashader_can_color_by_category(self, sdata_blobs: SpatialData): method="datashader", ).pl.show() + def test_plot_datashader_colors_from_table_obs(self, sdata_blobs: SpatialData): + n_obs = len(sdata_blobs["blobs_points"]) + obs = pd.DataFrame( + { + "instance_id": np.arange(n_obs), + "region": pd.Categorical(["blobs_points"] * n_obs), + "foo": pd.Categorical(np.where(np.arange(n_obs) % 2 == 0, "a", "b")), + } + ) + + table = TableModel.parse( + adata=AnnData(get_standard_RNG().normal(size=(n_obs, 3)), obs=obs), + region="blobs_points", + region_key="region", + instance_key="instance_id", + ) + sdata_blobs["datashader_table"] = table + + sdata_blobs.pl.render_points( + "blobs_points", + color="foo", + table_name="datashader_table", + method="datashader", + size=5, + ).pl.show() + def test_plot_datashader_can_use_sum_as_reduction(self, sdata_blobs: SpatialData): sdata_blobs.pl.render_points( element="blobs_points", @@ -487,3 +513,30 @@ def test_warns_when_table_does_not_annotate_element(sdata_blobs: SpatialData): table_name="other_table", ).pl.show() ) + + +def test_datashader_colors_points_from_table_obs(sdata_blobs: SpatialData): + n_obs = len(sdata_blobs["blobs_points"]) + obs = pd.DataFrame( + { + "instance_id": np.arange(n_obs), + "region": pd.Categorical(["blobs_points"] * n_obs), + "foo": pd.Categorical(np.where(np.arange(n_obs) % 2 == 0, "a", "b")), + } + ) + + table = TableModel.parse( + adata=AnnData(get_standard_RNG().normal(size=(n_obs, 3)), obs=obs), + region="blobs_points", + region_key="region", + instance_key="instance_id", + ) + sdata_blobs["datashader_table"] = table + + sdata_blobs.pl.render_points( + "blobs_points", + color="foo", + table_name="datashader_table", + method="datashader", + size=5, + ).pl.show() From 05993e7880009e3b5772d62f761bd9438cabb265 Mon Sep 17 00:00:00 2001 From: Tim Treis Date: Sat, 15 Nov 2025 14:41:09 +0100 Subject: [PATCH 2/2] added img from runner --- ...oints_datashader_colors_from_table_obs.png | Bin 25398 -> 27124 bytes tests/pl/test_render_points.py | 1 + 2 files changed, 1 insertion(+) diff --git a/tests/_images/Points_datashader_colors_from_table_obs.png b/tests/_images/Points_datashader_colors_from_table_obs.png index 15979822d53c1b190ebd3a4af8620178dc1da52f..35fc36fd6d7efb5465f7d2324dd34386f7fa9a8f 100644 GIT binary patch literal 27124 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 BNXh^J diff --git a/tests/pl/test_render_points.py b/tests/pl/test_render_points.py index c8906360..5e3fc38a 100644 --- a/tests/pl/test_render_points.py +++ b/tests/pl/test_render_points.py @@ -516,6 +516,7 @@ def test_warns_when_table_does_not_annotate_element(sdata_blobs: SpatialData): def test_datashader_colors_points_from_table_obs(sdata_blobs: SpatialData): + # Fast regression for https://github.com/scverse/spatialdata-plot/issues/479. n_obs = len(sdata_blobs["blobs_points"]) obs = pd.DataFrame( {