Skip to content

generalize sc.tl.embedding_density() to use any 'obsm' key #3642

@fishjo

Description

@fishjo

What kind of feature would you like to request?

Additional function parameters / changed functionality / changed defaults?

Please describe your wishes

background

the current implementation of 'sc.tl.embedding_density' assumes embeddings are stored in 'adata.obsm['x_']'. this works for standard embeddings like UMAP or PCA but breaks down when working with custom embeddings such as 'adata.obsm['z_umap']' or 'adata.obsm['u_umap']'.

problem

this hardcoded assumption prevents users from computing density estimates on latent spaces learned by custom models (e.g. scvi, mrvi, totalvi), especially when embeddings are stored under alternative names.

proposal

  • allow an optional 'obsm_key' argument that overrides the 'x_' logic.
  • or relax the naming constraint by trying 'basis' directly before falling back to 'x_'.

benefit

this improves flexibility and aligns better with increasingly common model-based workflows in the single-cell community.

example

adata.obsm['u_umap'] = u_umap
sc.tl.embedding_density(adata, basis='u_umap') # fails due to 'X_u_umap' assumption

Metadata

Metadata

Assignees

No one assigned

    Labels

    Triage 🩺This issue needs to be triaged by a maintainer

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions