Chapter 1 Getting started with cellxgene VIP

This is a cellxgene VIP supplementary information including a tutorial book written in Bookdown.

1.1 Why use cellxgene VIP?

To meet the growing demands from scientists to effectively extract deep insights from single cell RNA sequencing, spatial transcriptomics, and emerging multiome datasets, we developed cellxgene VIP (Visualization In Plugin), a frontend interactive visualization plugin of cellxgene framework, which greatly expanded capabilities of the base tool in the following aspects. First, it generates a comprehensive set of over eighteen commonly used quality control and analytical plots in high resolution with highly customizable settings in real time. Second, it provides more advanced analytical functions to gain insights on cellular compositions and deep biology, such as marker gene identification, differential gene expression analysis, and gene set enrichment analysis. Third, it empowers advanced users to perform analysis in a Jupyter Notebook like environment, dubbed Command Line Interface (CLI) by programming in Python and/or R directly without limiting themselves to functional modules available via graphical user interface (GUI). Finally, it pioneers methods to visualize multi-modal data, such as spatial transcriptomics embedding aligned with histological image on one slice or multiple slices in a grid format, and the latest 10x Genomic Multiome dataset where both DNA accessibility and gene expression in the same cells are measured, under the same framework in an integrative way to fully leverage the functionalities mentioned above. Taken together, the open-source tool makes large scale single cell data visualization and analysis more accessible to biologists in a user-friendly manner and fosters computational reproducibility by simplifying data and code reuse through the CLI. Going forward, it has the potential to become a crowdsourcing ecosystem for the scientific community to contribute even more modules to the Swiss Army knife of single cell data exploration tools.

1.2 Getting Set up

1.2.1 Execute anaconda

bash ~/Downloads/

If anaconda is not installed on server, you can install it following anaconda documentation ( ### Create and enable conda environment

# clone repo from cellxgene VIP github
git clone
cd cellxgene_VIP

# conda environment
source <path to Anaconda3>/etc/profile.d/ (Default: /opt/anaconda3/etc/profile.d/
conda config --set channel_priority flexible
conda env create -n <env name, such as: VIP> -f VIP.yml (system-wide R) or VIP_conda_R.yml (local R under conda, no root privilege needed)

Activate conda environment

conda activate <env name, such as: VIP>


source activate <env name>

1.2.2 Cellxgene installation

Install cellxgene by running in “cellxgene_VIP” directory


1.2.3 R dependencies

Install all required R packages on linux:

#  ensure that the right instance of R is used. e.g. system-wide: /bin/R or /usr/bin/R ; local R under conda: ~/.conda/envs/VIP_conda_R/bin/R
which R

R -q -e 'if(!require(devtools)) install.packages("devtools",repos = "")'
R -q -e 'if(!require(Cairo)) devtools::install_version("Cairo",version="1.5-12",repos = "")'
R -q -e 'if(!require(foreign)) devtools::install_version("foreign",version="0.8-76",repos = "")'
R -q -e 'if(!require(ggpubr)) devtools::install_version("ggpubr",version="0.3.0",repos = "")'
R -q -e 'if(!require(ggrastr)) devtools::install_version("ggrastr",version="0.1.9",repos = "")'
R -q -e 'if(!require(arrow)) devtools::install_version("arrow",version="2.0.0",repos = "")'
R -q -e 'if(!require(Seurat)) devtools::install_version("Seurat",version="3.2.3",repos = "")'
R -q -e 'if(!require(rmarkdown)) devtools::install_version("rmarkdown",version="2.5",repos = "")'
R -q -e 'if(!require(tidyverse)) devtools::install_version("tidyverse",version="1.3.0",repos = "")'
R -q -e 'if(!require(viridis)) devtools::install_version("viridis",version="0.5.1",repos = "")'
R -q -e 'if(!require(BiocManager)) devtools::install_version("BiocManager",version="1.30.10",repos = "")'
R -q -e 'if(!require(fgsea)) BiocManager::install("fgsea")'

# These should be already installed as dependencies of above packages
R -q -e 'if(!require(dbplyr)) devtools::install_version("dbplyr",version="1.0.2",repos = "")'
R -q -e 'if(!require(RColorBrewer)) devtools::install_version("RColorBrewer",version="1.1-2",repos = "")'
R -q -e 'if(!require(glue)) devtools::install_version("glue",version="1.4.2",repos = "")'
R -q -e 'if(!require(gridExtra)) devtools::install_version("gridExtra",version="2.3",repos = "")'
R -q -e 'if(!require(ggrepel)) devtools::install_version("ggrepel",version="0.8.2",repos = "")'
R -q -e 'if(!require(MASS)) devtools::install_version("MASS",version="7.3-51.6",repos = "")'
R -q -e 'if(!require(data.table)) devtools::install_version("data.table",version="1.13.0",repos = "")'

1.2.4 Run cellxgene by h5ad file

You can aslo run cellxgene by specifying a h5ad file, which stores scRNA-seq data along with a host and a port. Use ‘ps’ to find used ports to spare. Please see for details

ps -ef | grep cellxgene
Rscript -e 'reticulate::py_config()'
# Run the following command if the output of the above command doesn't point to the Python in your env.
export RETICULATE_PYTHON=`which python`
cellxgene launch --host <xxx> --port <xxx> --disable-annotations --verbose <h5ad file>

1.2.5 Cellxgene on web browser

chrome is preferred, version 87.0.4280.88 or 87.0.4280.141 is used. Users can access . Following screenshot is what you should be able to see in console of chrome developer tools. Alt text

1.3 Authors

  • Keijie Li (), Associate Director at Biogen in the research department. Main author and content wrangler.
  • Zhengyu Ouyang, Associate Director of Bioingormatics at BioinfoRx. Content wrangler.
  • Baohong Zhang (), Head of Genome Informatics at Biogen in the research department. Corresponding author and content wrangler.

The development and delivery of this material has also contributed by: