ebi-gene-expression-group / scanpy-scripts

Scripts for using scanpy
Apache License 2.0
30 stars 13 forks source link

Is make_plot_function passing the color argument correctly for plot embed? #101

Closed pcm32 closed 3 years ago

pcm32 commented 3 years ago

It seems to me that make_plot_function https://github.com/ebi-gene-expression-group/scanpy-scripts/blob/develop/scanpy_scripts/cmd_utils.py#L162 for embedding might not be passing the color option correctly. When executing:

scanpy-cli plot embed  --input-format 'anndata' input.h5  \
    --color 'cell_type,genotype,Cd8b,Cd4' \
    --use-raw --legend-loc 'on data' --legend-fontsize '9' \
    --basis 'draw_graph_fa' --gene-symbols Symbol --edges-width 0.1 \
    --projection 2d --no-sort-order  --fig-size '4,4' --fig-dpi 80 --fig-fontsize 10 --frameoff ./output.png

You get error:

Traceback (most recent call last):
  File "/Users/pmoreno/miniconda3/envs/__scanpy-scripts@0.4.1/bin/scanpy-cli", line 10, in <module>
    sys.exit(cli())
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/scanpy_scripts/cmd_utils.py", line 44, in cmd
    func(adata, **kwargs)
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/scanpy_scripts/cmd_utils.py", line 229, in plot_function
    func(
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/scanpy/plotting/_tools/scatterplots.py", line 244, in embedding
    color_source_vector = _get_color_source_vector(
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/scanpy/plotting/_tools/scatterplots.py", line 1217, in _get_color_source_vector
    value_to_plot = adata.var.index[adata.var[gene_symbols] == value_to_plot][
  File "/Users/pmoreno/miniconda/envs/__scanpy-scripts@0.4.1/lib/python3.8/site-packages/pandas/core/indexes/base.py", line 4298, in __getitem__
    return getitem(key)
IndexError: index 0 is out of bounds for axis 0 with size 0

which goes away (and works well) when not specifying --color. Could you give me some clue of how this is operating @nh3 please? Thanks!

nh3 commented 3 years ago

Can you check if 'CD8b' and 'Cd4' exists in adata.var["Symbol"] in addition to adata.raw.var["Symbol"]? Looking at scanpy's code at https://github.com/theislab/scanpy/blob/f73270688c3215c35a6f33b4f68298cadbfadb68/scanpy/plotting/_tools/scatterplots.py#L1211, it doesn't check adata.raw.var even if specifying use_raw=True.

--color should be correctly passed.

pcm32 commented 3 years ago

Yes you are right, one of the two genes was missing from var["Symbol"], thanks @nh3!