-
Notifications
You must be signed in to change notification settings - Fork 18
Description
Hello,
I work with spatialdata-plot version: 0.2.7.dev2+g6ffe22b on the following visium HD data:

I have annotated the 8um bins table with cell clusters:

When I do a subset of my spatialdata object and plot it using groups to select specific clusters, there is no issue:

The spatialdata crop contains all different clusters that are present in the whole spatialdata table:

For 10 different crops (always of size 500 * 500), the plotting function works fine
But when I want to generate the same plot with the whole spatialdata, it raises the following issue:

`---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[228], line 1
----> 1 sdata.pl.render_shapes("features_square_008um", color="banksy_0.2_leiden_res_0.10", groups=["0"]).pl.show()
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/spatialdata_plot/pl/basic.py:879, in PlotAccessor.show(self, coordinate_systems, legend_fontsize, legend_fontweight, legend_loc, legend_fontoutline, na_in_legend, colorbar, wspace, hspace, ncols, frameon, figsize, dpi, fig, title, share_extent, pad_extent, ax, return_ax, save)
874 wanted_elements, wanted_shapes_on_this_cs, wants_shapes = _get_wanted_render_elements(
875 sdata, wanted_elements, params_copy, cs, "shapes"
876 )
878 if wanted_shapes_on_this_cs:
--> 879 _render_shapes(
880 sdata=sdata,
881 render_params=params_copy,
882 coordinate_system=cs,
883 ax=ax,
884 fig_params=fig_params,
885 scalebar_params=scalebar_params,
886 legend_params=legend_params,
887 )
889 elif cmd == "render_points" and has_points:
890 wanted_elements, wanted_points_on_this_cs, wants_points = _get_wanted_render_elements(
891 sdata, wanted_elements, params_copy, cs, "points"
892 )
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/spatialdata_plot/pl/render.py:191, in _render_shapes(sdata, render_params, coordinate_system, ax, fig_params, scalebar_params, legend_params)
189 # in case we are coloring by a column in table
190 if col_for_color is not None and col_for_color not in sdata_filt.shapes[element].columns:
--> 191 sdata_filt.shapes[element][col_for_color] = (
192 color_vector if color_source_vector is None else color_source_vector
193 )
194 # Render shapes with datashader
195 color_by_categorical = col_for_color is not None and color_source_vector is not None
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/geopandas/geodataframe.py:1819, in GeoDataFrame.setitem(self, key, value)
1814 except TypeError:
1815 warnings.warn(
1816 "Geometry column does not contain geometry.",
1817 stacklevel=2,
1818 )
-> 1819 super().setitem(key, value)
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/pandas/core/frame.py:4311, in DataFrame.setitem(self, key, value)
4308 self._setitem_array([key], value)
4309 else:
4310 # set column
-> 4311 self._set_item(key, value)
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/pandas/core/frame.py:4524, in DataFrame._set_item(self, key, value)
4514 def _set_item(self, key, value) -> None:
4515 """
4516 Add series to DataFrame in specified column.
4517
(...)
4522 ensure homogeneity.
4523 """
-> 4524 value, refs = self._sanitize_column(value)
4526 if (
4527 key in self.columns
4528 and value.ndim == 1
4529 and not isinstance(value.dtype, ExtensionDtype)
4530 ):
4531 # broadcast across multiple columns if necessary
4532 if not self.columns.is_unique or isinstance(self.columns, MultiIndex):
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/pandas/core/frame.py:5266, in DataFrame._sanitize_column(self, value)
5263 return _reindex_for_setitem(value, self.index)
5265 if is_list_like(value):
-> 5266 com.require_length_match(value, self.index)
5267 arr = sanitize_array(value, self.index, copy=True, allow_2d=True)
5268 if (
5269 isinstance(value, Index)
5270 and value.dtype == "object"
(...)
5273 # TODO: Remove kludge in sanitize_array for string mode when enforcing
5274 # this deprecation
File /data/kdi_prod/.kdi/project_workspace_0/1928/acl/03.00/code/envs/python_visium/lib/python3.10/site-packages/pandas/core/common.py:573, in require_length_match(data, index)
569 """
570 Check the length of data matches the length of the index.
571 """
572 if len(data) != len(index):
--> 573 raise ValueError(
574 "Length of values "
575 f"({len(data)}) "
576 "does not match length of index "
577 f"({len(index)})"
578 )
ValueError: Length of values (246009) does not match length of index (696564)`
When plotting a crop of my spatialdata, the plotting backend is matplotlib, whereas it is datashader when I plot the whole spatialdata