sc.pl.stacked_violin: issue using imported adata
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
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()
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
I can reproduce the problem. I will take a look
Thanks a lot