-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
Hi,
render_shapes is not working as expected, I think I know why:
Simple sdata object:
SpatialData object, with associated Zarr store: [/Users/jnimoca/Jose_BI/1_Pipelines/openDVP/notebooks/outputs/spatialdata.zarr](https://file+.vscode-resource.vscode-cdn.net/Users/jnimoca/Jose_BI/1_Pipelines/openDVP/notebooks/outputs/spatialdata.zarr)
├── Images
│ └── 'mIF': DataArray[cyx] (15, 5000, 5000)
├── Shapes
│ └── 'Slide_P12': GeoDataFrame shape: (20, 4) (2D shapes)
└── Tables
└── 'proteomics': AnnData (10, 4637)
with coordinate systems:
▸ 'global', with elements:
mIF (Images), Slide_P12 (Shapes)
sdata['proteomics'].obs
returns:
When trying to plot these shapes it fails:
sdata.pl.render_shapes(
element="Slide_P12",
table_name="proteomics",
color="IMPA2",
cmap="viridis",
norm=Normalize(vmin=10, vmax=15, clip=False)
).pl.show()
Traceback:
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
Cell In[87], line 7
1 sdata.pl.render_shapes(
2 element="Slide_P12",
3 table_name="proteomics",
4 color="IMPA2",
5 cmap="viridis",
6 norm=Normalize(vmin=10, vmax=15, clip=False)
----> 7 ).pl.show()
File ~/Jose_BI/1_Pipelines/openDVP/.pixi/envs/spatialdata/lib/python3.12/site-packages/spatialdata_plot/pl/basic.py:936, 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)
931 wanted_elements, wanted_shapes_on_this_cs, wants_shapes = _get_wanted_render_elements(
932 sdata, wanted_elements, params_copy, cs, "shapes"
933 )
935 if wanted_shapes_on_this_cs:
--> 936 _render_shapes(
937 sdata=sdata,
938 render_params=params_copy,
939 coordinate_system=cs,
940 ax=ax,
941 fig_params=fig_params,
942 scalebar_params=scalebar_params,
943 legend_params=legend_params,
944 )
946 elif cmd == "render_points" and has_points:
947 wanted_elements, wanted_points_on_this_cs, wants_points = _get_wanted_render_elements(
948 sdata, wanted_elements, params_copy, cs, "points"
949 )
File ~/Jose_BI/1_Pipelines/openDVP/.pixi/envs/spatialdata/lib/python3.12/site-packages/spatialdata_plot/pl/render.py:110, in _render_shapes(sdata, render_params, coordinate_system, ax, fig_params, scalebar_params, legend_params)
107 sdata_filt[table_name].obs[col_for_color] = sdata_filt[table_name].obs[col_for_color].astype("category")
109 # get color vector (categorical or continuous)
--> 110 color_source_vector, color_vector, _ = _set_color_source_vec(
111 sdata=sdata_filt,
112 element=sdata_filt[element],
113 element_name=element,
114 value_to_plot=col_for_color,
115 groups=groups,
116 palette=render_params.palette,
117 na_color=render_params.color or render_params.cmap_params.na_color,
118 cmap_params=render_params.cmap_params,
119 table_name=table_name,
120 table_layer=table_layer,
121 )
123 values_are_categorical = color_source_vector is not None
125 # color_source_vector is None when the values aren't categorical
File ~/Jose_BI/1_Pipelines/openDVP/.pixi/envs/spatialdata/lib/python3.12/site-packages/spatialdata_plot/pl/utils.py:732, in _set_color_source_vec(sdata, element, value_to_plot, na_color, element_name, groups, palette, cmap_params, alpha, table_name, table_layer, render_type)
727 raise ValueError(
728 f"Color key '{value_to_plot}' for element '{element_name}' been found in multiple locations: {origins}."
729 )
731 if len(origins) == 1:
--> 732 color_source_vector = get_values(
733 value_key=value_to_plot,
734 sdata=sdata,
735 element_name=element_name,
736 table_name=table_name,
737 table_layer=table_layer,
738 )[value_to_plot]
740 # numerical case, return early
741 # TODO temporary split until refactor is complete
742 if color_source_vector is not None and not isinstance(color_source_vector.dtype, pd.CategoricalDtype):
File ~/Jose_BI/1_Pipelines/openDVP/.pixi/envs/spatialdata/lib/python3.12/site-packages/spatialdata/_core/query/relational_query.py:979, in get_values(value_key, element, sdata, element_name, table_name, table_layer, return_obsm_as_is)
977 obs = matched_table.obs
978 assert obs[region_key].nunique() == 1
--> 979 assert obs[instance_key].nunique() == len(matched_table)
980 else:
981 matched_table = element
AssertionError:
check 1: there is data

check 2: removing duplicate index from shapes element fixes it

Metadata
Metadata
Assignees
Labels
No labels