scanpy icon indicating copy to clipboard operation
scanpy copied to clipboard

Dendrogram error - symmetry

Open wdg118 opened this issue 3 years ago • 0 comments

  • [x] I have checked that this issue has not already been reported.
  • [x] I have confirmed this bug exists on the latest version of scanpy.
  • [ ] (optional) I have confirmed this bug exists on the master branch of scanpy.

Hi,

I've tried to run a matrix plot with a dendrogram and I get this error regarding the distance matrix. I'm not sure whether the problem is my data or Scanpy itself.

Thanks,

Will

Minimal code sample (that we can copy&paste without having any data)

# sc.pl.rank_genes_groups_heatmap(ad, n_genes=1, key="wilcoxon", groupby="leiden", show_gene_labels=True, figsize = [10,10], dendrogram = True )
[WARNING: dendrogram data not found (using key=dendrogram_leiden). Running `sc.tl.dendrogram` with default parameters. For fine tuning it is recommended to run `sc.tl.dendrogram` independently.
    using data matrix X directly
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-71-f7d35408db0b> in <module>
----> 1 sc.pl.rank_genes_groups_heatmap(ad, n_genes=1, key="wilcoxon", groupby="leiden", show_gene_labels=True, figsize = [10,10], dendrogram = True )

~/.local/lib/python3.8/site-packages/scanpy/plotting/_tools/__init__.py in rank_genes_groups_heatmap(adata, groups, n_genes, groupby, gene_symbols, var_names, min_logfoldchange, key, show, save, **kwds)
    671     tl.dendrogram
    672     """
--> 673     return _rank_genes_groups_plot(
    674         adata,
    675         plot_type='heatmap',

~/.local/lib/python3.8/site-packages/scanpy/plotting/_tools/__init__.py in _rank_genes_groups_plot(adata, plot_type, groups, n_genes, groupby, values_to_plot, var_names, min_logfoldchange, key, show, save, return_fig, gene_symbols, **kwds)
    590         from .._anndata import heatmap
    591 
--> 592         return heatmap(
    593             adata,
    594             var_names,

~/.local/lib/python3.8/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, vmin, vmax, vcenter, norm, **kwds)
   1085 
   1086     if dendrogram:
-> 1087         dendro_data = _reorder_categories_after_dendrogram(
   1088             adata,
   1089             groupby,

~/.local/lib/python3.8/site-packages/scanpy/plotting/_anndata.py in _reorder_categories_after_dendrogram(adata, groupby, dendrogram, var_names, var_group_labels, var_group_positions, categories)
   2132     """
   2133 
-> 2134     key = _get_dendrogram_key(adata, dendrogram, groupby)
   2135 
   2136     if isinstance(groupby, str):

~/.local/lib/python3.8/site-packages/scanpy/plotting/_anndata.py in _get_dendrogram_key(adata, dendrogram_key, groupby)
   2234             "tuning it is recommended to run `sc.tl.dendrogram` independently."
   2235         )
-> 2236         dendrogram(adata, groupby, key_added=dendrogram_key)
   2237 
   2238     if 'dendrogram_info' not in adata.uns[dendrogram_key]:

~/.local/lib/python3.8/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)
    137 
    138     corr_matrix = mean_df.T.corr(method=cor_method)
--> 139     corr_condensed = distance.squareform(1 - corr_matrix)
    140     z_var = sch.linkage(
    141         corr_condensed, method=linkage_method, optimal_ordering=optimal_ordering

~/.local/lib/python3.8/site-packages/scipy/spatial/distance.py in squareform(X, force, checks)
   2343             raise ValueError('The matrix argument must be square.')
   2344         if checks:
-> 2345             is_valid_dm(X, throw=True, name='X')
   2346 
   2347         # One-side of the dimensions is set here.

~/.local/lib/python3.8/site-packages/scipy/spatial/distance.py in is_valid_dm(D, tol, throw, name, warning)
   2418             if not (D == D.T).all():
   2419                 if name:
-> 2420                     raise ValueError(('Distance matrix \'%s\' must be '
   2421                                      'symmetric.') % name)
   2422                 else:

ValueError: Distance matrix 'X' must be symmetric.]

Versions

Scanpy 1.9.1, Pandas 1.4.1

wdg118 avatar Oct 20 '22 10:10 wdg118