scanpy icon indicating copy to clipboard operation
scanpy copied to clipboard

sc.pl.stacked_violin: issue using imported adata

Open bebatut opened this issue 7 years ago • 4 comments

Hi,

I am testing sc.pl.stacked_violin and I had an issue with running it on an AnnData variable that is imported from a h5ad file. I explain.

If I run:

>>> import scanpy.api as sc
>>> adata = sc.datasets.krumsiek11()
>>> sc.pl.stacked_violin(adata, adata.var_names, 'cell_type', use_raw=False, color='blue', show=False)

No problem, but if I run:

>>> import scanpy.api as sc
>>> adata = sc.datasets.krumsiek11()
>>> adata.write('anndata.h5ad')
>>> adata = sc.read_h5ad('anndata.h5ad')
>>> sc.pl.stacked_violin(adata, adata.var_names, 'cell_type', use_raw=False, color='blue', show=False)

then I got the error:

Traceback (most recent call last):
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/miniconda3/envs/scanpy/lib/python3.6/site-packages/scanpy/plotting/anndata.py", line 896, in stacked_violin
    orient='vertical', scale=scale, ax=ax, **kwds)
  File "/miniconda3/envs/scanpy/lib/python3.6/site-packages/seaborn/categorical.py", line 2387, in violinplot
    color, palette, saturation)
  File "/miniconda3/envs/scanpy/lib/python3.6/site-packages/seaborn/categorical.py", line 562, in __init__
    self.establish_variables(x, y, hue, data, orient, order, hue_order)
  File "/miniconda3/envs/scanpy/lib/python3.6/site-packages/seaborn/categorical.py", line 155, in establish_variables
    raise ValueError(err)
ValueError: Could not interpret input 'variable'

I tested it with versions 1.3.1 and 1.3.2, installed with bioconda.

Any idea?

Bérénice

bebatut avatar Oct 22 '18 11:10 bebatut

Very strange. variable is some assigned name after an internal pandas.melt.

First, I would not recommend to plot all adata.var_names unless they are fewer (<30). But that seems not to be the problem.

To discard a problem with seaborn violin plot, can you try sc.pl.matrixplot instead?

Also, do you get the same output in both cases after

adata.obs.head()

fidelram avatar Oct 22 '18 11:10 fidelram

Not exactly the same head:

>>> adata = sc.datasets.krumsiek11()
>>> adata.obs.head()
    cell_type
0  progenitor
1  progenitor
2  progenitor
3  progenitor
4  progenitor
>>> adata.write('anndata.h5ad')
>>> adata = sc.read_h5ad('anndata.h5ad')
>>> adata.obs.head()
        cell_type
index
0      progenitor
1      progenitor
2      progenitor
3      progenitor
4      progenitor

bebatut avatar Oct 22 '18 13:10 bebatut

I can reproduce the problem. I will take a look

fidelram avatar Oct 23 '18 07:10 fidelram

Thanks a lot

bebatut avatar Oct 23 '18 07:10 bebatut