scvelo: scv.pl.scatter cannot generate plot to show transcriptional switches

scv.pl.scatter cannot generate plot to show transcriptional switches. I convert seurat object to anndata, and then perform rna velocity (dynamical model) through scVelo. I can generate the heatmap of top likelihood genes.

var_names = ['TNFRSF4']
scv.pl.scatter(WT_WT, var_names, frameon=False)
scv.pl.scatter(WT_WT, x='latent_time', y='IL1RN', frameon=False)
Error
KeyError                                  Traceback (most recent call last)
~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/scope.py in resolve(self, key, is_local)
    200             if self.has_resolvers:
--> 201                 return self.resolvers[key]
    202 

~/.conda/envs/py_seq/lib/python3.8/collections/__init__.py in __getitem__(self, key)
    897                 pass
--> 898         return self.__missing__(key)            # support subclasses that define __missing__
    899 

~/.conda/envs/py_seq/lib/python3.8/collections/__init__.py in __missing__(self, key)
    889     def __missing__(self, key):
--> 890         raise KeyError(key)
    891 

KeyError: 'IL1RN'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/scope.py in resolve(self, key, is_local)
    211                 # e.g., df[df > 0]
--> 212                 return self.temps[key]
    213             except KeyError as err:

KeyError: 'IL1RN'

The above exception was the direct cause of the following exception:

UndefinedVariableError                    Traceback (most recent call last)
<ipython-input-74-2764e73f8fda> in <module>
      1 var_names = ['TNFRSF4']
      2 scv.pl.scatter(WT_WT, var_names, frameon=False)
----> 3 scv.pl.scatter(WT_WT, x='latent_time', y='IL1RN', frameon=False)

~/.local/lib/python3.8/site-packages/scvelo/plotting/scatter.py in scatter(adata, basis, x, y, vkey, color, use_raw, layer, color_map, colorbar, palette, size, alpha, linewidth, linecolor, perc, groups, sort_order, components, projection, legend_loc, legend_loc_lines, legend_fontsize, legend_fontweight, legend_fontoutline, xlabel, ylabel, title, fontsize, figsize, xlim, ylim, add_density, add_assignments, add_linfit, add_polyfit, add_rug, add_text, add_text_pos, add_outline, outline_width, outline_color, n_convolve, smooth, rescale_color, color_gradients, dpi, frameon, zorder, ncols, nrows, wspace, hspace, show, save, ax, **kwargs)
    431                         obs = adata.obs[obs_keys]
    432                         x = obs.astype(np.float32).eval(x)
--> 433                         y = obs.astype(np.float32).eval(y)
    434                     else:
    435                         raise ValueError(

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/frame.py in eval(self, expr, inplace, **kwargs)
   3597         kwargs["resolvers"] = kwargs.get("resolvers", ()) + tuple(resolvers)
   3598 
-> 3599         return _eval(expr, inplace=inplace, **kwargs)
   3600 
   3601     def select_dtypes(self, include=None, exclude=None) -> DataFrame:

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/eval.py in eval(expr, parser, engine, truediv, local_dict, global_dict, resolvers, level, target, inplace)
    340         )
    341 
--> 342         parsed_expr = Expr(expr, engine=engine, parser=parser, env=env)
    343 
    344         # construct the engine and evaluate the parsed expression

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in __init__(self, expr, engine, parser, env, level)
    796         self.parser = parser
    797         self._visitor = PARSERS[parser](self.env, self.engine, self.parser)
--> 798         self.terms = self.parse()
    799 
    800     @property

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in parse(self)
    815         Parse an expression.
    816         """
--> 817         return self._visitor.visit(self.expr)
    818 
    819     @property

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in visit(self, node, **kwargs)
    399         method = "visit_" + type(node).__name__
    400         visitor = getattr(self, method)
--> 401         return visitor(node, **kwargs)
    402 
    403     def visit_Module(self, node, **kwargs):

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in visit_Module(self, node, **kwargs)
    405             raise SyntaxError("only a single expression is allowed")
    406         expr = node.body[0]
--> 407         return self.visit(expr, **kwargs)
    408 
    409     def visit_Expr(self, node, **kwargs):

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in visit(self, node, **kwargs)
    399         method = "visit_" + type(node).__name__
    400         visitor = getattr(self, method)
--> 401         return visitor(node, **kwargs)
    402 
    403     def visit_Module(self, node, **kwargs):

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in visit_Expr(self, node, **kwargs)
    408 
    409     def visit_Expr(self, node, **kwargs):
--> 410         return self.visit(node.value, **kwargs)
    411 
    412     def _rewrite_membership_op(self, node, left, right):

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in visit(self, node, **kwargs)
    399         method = "visit_" + type(node).__name__
    400         visitor = getattr(self, method)
--> 401         return visitor(node, **kwargs)
    402 
    403     def visit_Module(self, node, **kwargs):

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/expr.py in visit_Name(self, node, **kwargs)
    533 
    534     def visit_Name(self, node, **kwargs):
--> 535         return self.term_type(node.id, self.env, **kwargs)
    536 
    537     def visit_NameConstant(self, node, **kwargs):

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/ops.py in __init__(self, name, env, side, encoding)
     84         tname = str(name)
     85         self.is_local = tname.startswith(LOCAL_TAG) or tname in DEFAULT_GLOBALS
---> 86         self._value = self._resolve_name()
     87         self.encoding = encoding
     88 

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/ops.py in _resolve_name(self)
    101 
    102     def _resolve_name(self):
--> 103         res = self.env.resolve(self.local_name, is_local=self.is_local)
    104         self.update(res)
    105 

~/.conda/envs/py_seq/lib/python3.8/site-packages/pandas/core/computation/scope.py in resolve(self, key, is_local)
    215                 from pandas.core.computation.ops import UndefinedVariableError
    216 
--> 217                 raise UndefinedVariableError(key, is_local) from err
    218 
    219     def swapkey(self, old_key: str, new_key: str, new_value=None):

UndefinedVariableError: name 'IL1RN' is not defined

Versions:

scvelo==0.2.3 scanpy==1.7.2 anndata==0.7.5

download

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 25 (12 by maintainers)

Most upvoted comments

@Lobbii, the problem are the variable names in adata.raw:

>>> adata.raw.var_names
Index(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
       ...
       '24411', '24412', '24413', '24414', '24415', '24416', '24417', '24418',
       '24419', '24420'],
      dtype='object', length=24421)

Everything works with use_raw=False, i.e.,

scv.pl.scatter(adata, x='latent_time', y=top_genes[1], frameon=False, use_raw=False)