scverse / scanpy

Single-cell analysis in Python. Scales to >1M cells.
https://scanpy.readthedocs.io
BSD 3-Clause "New" or "Revised" License
1.87k stars 594 forks source link

Error in sc.pl.rank_genes_groups_heatmap: The truth value of a Index is ambiguous. #1313

Open preethiperi opened 4 years ago

preethiperi commented 4 years ago

The following issue occurs when running the function sc.pl.rank_gene_groups_heatmap (as in the spatial transcriptomics tutorial found at https://scanpy-tutorials.readthedocs.io/en/latest/spatial/basic-analysis.html#Cluster-marker-genes), under "Cluster marker genes".

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

adata = sc.datasets.visium_sge(sample_id="V1_Human_Lymph_Node")
adata.var_names_make_unique()
adata.var["mt"] = adata.var_names.str.startswith("MT-")
sc.pp.calculate_qc_metrics(adata, qc_vars=["mt"], inplace=True)

sc.tl.rank_genes_groups(adata, "clusters", method="t-test")
sc.pl.rank_genes_groups_heatmap(adata, groups="5", n_genes=10, groupby="clusters")

The results are as follows:

    finished: added to `.uns['rank_genes_groups']`
    'names', sorted np.recarray to be indexed by group ids
    'scores', sorted np.recarray to be indexed by group ids
    'logfoldchanges', sorted np.recarray to be indexed by group ids
    'pvals', sorted np.recarray to be indexed by group ids
    'pvals_adj', sorted np.recarray to be indexed by group ids (0:00:02)
WARNING: dendrogram data not found (using key=dendrogram_clusters). Running `sc.tl.dendrogram` with default parameters. For fine tuning it is recommended to run `sc.tl.dendrogram` independently.
    using 'X_pca' with n_pcs = 50
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-19-a44c51f396af> in <module>
      2 # genes across clusters.
      3 sc.tl.rank_genes_groups(adata, "clusters", method="t-test")
----> 4 sc.pl.rank_genes_groups_heatmap(adata, groups="5", n_genes=10, groupby="clusters")

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scanpy/plotting/_tools/__init__.py in rank_genes_groups_heatmap(adata, groups, n_genes, groupby, key, show, save, **kwds)
    454         show=show,
    455         save=save,
--> 456         **kwds,
    457     )
    458 

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scanpy/plotting/_tools/__init__.py in _rank_genes_groups_plot(adata, plot_type, groups, n_genes, groupby, key, show, save, **kwds)
    392         from .._anndata import heatmap
    393         heatmap(adata, gene_names, groupby, var_group_labels=group_names,
--> 394                 var_group_positions=group_positions, show=show, save=save, **kwds)
    395 
    396     elif plot_type == 'stacked_violin':

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scanpy/plotting/_anndata.py in heatmap(adata, var_names, groupby, use_raw, log, num_categories, dendrogram, gene_symbols, var_group_positions, var_group_labels, var_group_rotation, layer, standard_scale, swap_axes, show_gene_labels, show, save, figsize, **kwds)
   1454             var_names=var_names,
   1455             var_group_labels=var_group_labels,
-> 1456             var_group_positions=var_group_positions,
   1457         )
   1458 

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scanpy/plotting/_anndata.py in _reorder_categories_after_dendrogram(adata, groupby, dendrogram, var_names, var_group_labels, var_group_positions)
   3109     """
   3110 
-> 3111     key = _get_dendrogram_key(adata, dendrogram, groupby)
   3112 
   3113     dendro_info = adata.uns[key]

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scanpy/plotting/_anndata.py in _get_dendrogram_key(adata, dendrogram_key, groupby)
   3195             "tuning it is recommended to run `sc.tl.dendrogram` independently."
   3196         )
-> 3197         dendrogram(adata, groupby, key_added=dendrogram_key)
   3198 
   3199     if 'dendrogram_info' not in adata.uns[dendrogram_key]:

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scanpy/tools/_dendrogram.py in dendrogram(adata, groupby, n_pcs, use_rep, var_names, use_raw, cor_method, linkage_method, optimal_ordering, key_added, inplace)
    130         corr_matrix, method=linkage_method, optimal_ordering=optimal_ordering
    131     )
--> 132     dendro_info = sch.dendrogram(z_var, labels=categories, no_plot=True)
    133 
    134     # order of groupby categories

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/scipy/cluster/hierarchy.py in dendrogram(Z, p, truncate_mode, color_threshold, get_leaves, orientation, labels, count_sort, distance_sort, show_leaf_counts, no_plot, no_labels, leaf_font_size, leaf_rotation, leaf_label_func, show_contracted, link_color_func, ax, above_threshold_color)
   3275                          "'bottom', or 'right'")
   3276 
-> 3277     if labels and Z.shape[0] + 1 != len(labels):
   3278         raise ValueError("Dimensions of Z and labels must be consistent.")
   3279 

~/.pyenv/versions/3.6.9/lib/python3.6/site-packages/pandas/core/indexes/base.py in __nonzero__(self)
   2229         raise ValueError("The truth value of a {0} is ambiguous. "
   2230                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 2231                          .format(self.__class__.__name__))
   2232 
   2233     __bool__ = __nonzero__

ValueError: The truth value of a Index is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

VERSIONS: scanpy==1.5.1 anndata==0.7.3 umap==0.4.6 numpy==1.16.4 scipy==1.5.0 pandas==0.24.2 scikit-learn==0.21.2 statsmodels==0.10.0 python-igraph==0.8.2 leidenalg==0.8.1 Python version: 3.6.9

Koncopd commented 4 years ago

Hi, this is fixed on master. You can temporarily downgrade scipy to avoid this error.

preethiperi commented 4 years ago

Hi, was it just fixed? If I clone right now, will I not have to downgrade scipy?

Koncopd commented 4 years ago

Yes, it should work without downgrading.