Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using groups in pl.render_shapes() fails with large data #357

Open
ConstensouxAlexis opened this issue Sep 18, 2024 · 1 comment
Open

Using groups in pl.render_shapes() fails with large data #357

ConstensouxAlexis opened this issue Sep 18, 2024 · 1 comment

Comments

@ConstensouxAlexis
Copy link

ConstensouxAlexis commented Sep 18, 2024

Hello,
I work with spatialdata-plot version: 0.2.7.dev2+g6ffe22b on the following visium HD data:
image
I have annotated the 8um bins table with cell clusters:
image
When I do a subset of my spatialdata object and plot it using groups to select specific clusters, there is no issue:
image
The spatialdata crop contains all different clusters that are present in the whole spatialdata table:
image
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:
image
`---------------------------------------------------------------------------
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

@LucaMarconato
Copy link
Member

Hi, I think that the problem is due to this bug #169. We will try to fix it the soonest.

You could try to see if switching plotting backend helps (you can use method='datashader' or method='matplotlib' in .render_shapes()). Also you could try using #309. But I think that the issue is not backend related.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants