Multi-column `groupby` crashes on non-string observations in dotplot/matrixplot/heatmap
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- data-visualization
Direzione di ricerca
Inizia in plotting/legacy/_anndata.py, in _prepare_dataframe, quindi segui il modo in cui BasePlot.init lo invoca. Riproduci l’esempio minimo di dotplot e controlla i corrispondenti percorsi di matrixplot, stacked_violin, tracksplot e heatmap; il lavoro è completato quando multi-column groupby accetta osservazioni numeriche e categoriali senza gli errori segnalati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Please make sure these conditions are met
- I have checked that this issue has not already been reported.
- I have confirmed this bug exists on the latest version of scanpy.
- (optional) I have confirmed this bug exists on the main branch of scanpy.
What happened?
Passing a list of groupby keys fails with TypeError when any key is a non-string observation, whether an integer categorical or a plain numeric column. A single-key groupby handles the same column fine (is_numeric_dtype → pd.cut, or astype("category")), so this only affects the multi-key path.
Reproduces in sc.pl.dotplot, sc.pl.matrixplot, sc.pl.stacked_violin, sc.pl.tracksplot, and sc.pl.heatmap: all go through _prepare_dataframe in plotting/legacy/_anndata.py (BasePlot subclasses call it from BasePlot.__init__).
Two problems in the multi-key branch:
obs_tidy[groupby].apply("_".join, axis=1)requires every joined value to bestr. Integer categories or numeric columns raiseTypeError: sequence item 1: expected str instance, int found.obs_tidy[g].cat.categoriesassumes each groupby column is categorical. A plain numeric column would raiseAttributeErrorat this line if it got past the join.
Minimal code sample
import numpy as np
import pandas as pd
import scanpy as sc
adata = sc.datasets.pbmc68k_reduced()
adata.obs["num_grp"] = pd.Categorical(np.repeat([1, 2], adata.n_obs // 2))
# single key works
sc.pl.dotplot(adata, var_names=adata.var_names[:4], groupby="num_grp", show=False)
# multi key raises TypeError
sc.pl.dotplot(adata, var_names=adata.var_names[:4], groupby=["bulk_labels", "num_grp"], show=False)
Error output
TypeError: sequence item 1: expected str instance, int found
I have a fix ready: convert joined values with astype(str), take levels from .cat.categories only for categorical columns (np.unique otherwise), and fall back to end-ordering for joined labels missing from the order map (NaN-containing combinations). Happy to open a PR.
- Lingua principale
- Python
- Stelle
- 2.6k
- Fork
- 801
- Merge medio
- 1g 3h
- PR unite (30g)
- 23
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di scverse/scanpy
-
`highly_variable_genes(flavor="cell_ranger", n_top_genes=n)` selects 0 genes when the top genes have infinite normalized dispersionForse già presa @jorgoose l’ha presa 11 giorni fa. ApertaTriage 🩺
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
`downsample_counts(total_counts=...)` silently does nothing for Fortran-ordered dense `X`Forse già presa @entity-0-0-2 l’ha presa 16 giorni fa. ApertaTriage 🩺
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
-
`highly_variable_genes` with `batch_key` and `subset=True` keeps the wrong genes when `n_top_genes` is not setForse già presa @haeganm l’ha presa 38 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
The `.uns` output for `scanpy.pp.highly_variable_genes` is not documentedForse già presa @asharaali l’ha presa 51 giorni fa. ApertaTriage 🩺
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
sc.pl.paga raises TypeError when cax is passed with multiple colorsForse già presa @AdvaitS l’ha presa 63 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di scverse/scanpy
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
conda-forge/conda-forge-bot#7025 ·
I maintainer di solito rispondono entro 1 giorno
-
area:ci
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 74/100
catincloud-labs/dagster-dex#149 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
home-assistant/core#188424 ·
I maintainer di solito rispondono entro 1 giorno
-
Review backlog (docs-currency): README 'CI run' link lands on a run whose overall badge is cancelledApertaagent/reviewer needs-kind needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
projectbluefin/utah#880 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
LSan reports obj_gen leak on post-parse usage() exits (aarch64)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
redis/memtier_benchmark#850 ·
I maintainer di solito rispondono entro 1 giorno