A
ShinyApp for Exploring scRNA-seq Data Processed inSeurat
A simple, one-command package which runs an interactive dashboard
capable of common visualizations for single cell RNA-seq.
SeuratExplorer requires a processed Seurat object, which is saved as
rds or qs2 file.
Essentially, SeuratExplorer provides graphical interfaces for
command-line tools from Seurat and other related packages, making
complex analyses accessible without programming.
Currently, there are no comprehensive tools for visualizing Seurat analysis results that are accessible to users without programming expertise. When bioinformatics analysts hand over results to end users, those without R programming knowledge often struggle to retrieve and re-analyze the data independently.
SeuratExploreris designed to bridge this gap by enabling such users to visualize and explore analysis results through an intuitive graphical interface. The only requirement for users is to configure R and RStudio on their computers and installSeuratExplorer. Alternatively, users can upload theirSeurat objectfiles to a server deployed withShiny ServerandSeuratExplorerfor browser-based access.
This app is now available on ShinyApps, a desktop app store for Shiny Apps that allows users to install, run, update, and uninstall apps.
The Windows desktop app is now ready. You can download it from the releases page.
Install the latest version from github - Recommended:
if(!require(devtools)){install.packages("devtools")}
devtools::install_github("fentouxungui/SeuratExplorer", dependencies = TRUE)
Or install from CRAN:
# Install non-CRAN dependencies first
if (!require("BiocManager", quietly = TRUE)){
install.packages("BiocManager")
}
BiocManager::install(c("ComplexHeatmap", "MAST", "limma", "DESeq2"))
# Install presto from GitHub
if(!require(devtools)){
install.packages("devtools")
}
devtools::install_github("immunogenomics/presto")
# Install SeuratExplorer from CRAN
install.packages("SeuratExplorer")
System Requirements:
library(SeuratExplorer)
launchSeuratExplorer()
You can customize the launch behavior with additional parameters:
verbose: Set to TRUE for debug messages (default: FALSE)ReductionKeyWords: Keywords for dimension reduction options
(default: c("umap","tsne"))SplitOptionMaxLevel: Maximum levels for split options (default:
12)MaxInputFileSize: Maximum upload file size in bytes (default:
20*1024^3, i.e., 20GB)# Example with custom parameters
launchSeuratExplorer(
verbose = TRUE,
ReductionKeyWords = c("umap", "tsne", "pca"),
MaxInputFileSize = 10*1024^3 # 10GB
)
You can deploy this app on a Shiny Server, which allows users to visualize their data through a web interface by uploading the data to the server.
Live Demo: Upload an .rds or .qs2 file (up to 20GB) to the Demo
Site. You can download
sample demo data from
GitHub.
# app.R
library(SeuratExplorer)
launchSeuratExplorer()
The Assay class stores single cell data. For typical scRNA-seq experiments, a Seurat object will have a single Assay (“RNA”). This assay will also store multiple ‘transformations’ of the data, including raw counts (@counts slot), normalized data (@data slot), and scaled data for dimensional reduction (@scale.data slot).
SeuratExplorer supports assay switching, enabling compatibility with multiple data types, including:
Single-cell Modalities:
Normalization Methods:
Assay Slots:
Different visualization features support different assay slots:
counts, data, scale.data
counts, data, scale.data
data slotdata, scale.data
data
counts, data, scale.data
counts, data
counts
data
data
counts, data
counts, data
Supports Seurat objects saved as .rds or .qs2 files
Supports data processed by Seurat V5 and older versions. Note: It
may take some time to update older Seurat objects when loading data

Supports selection of dimensionality reduction methods (UMAP, t-SNE, PCA, etc.)
Supports selection of cluster resolutions
Supports split plots
Supports highlighting selected clusters
Supports adjusting the height/width ratio of the plot
Supports displaying cluster labels
Supports adjusting label size
Supports adjusting point size
Supports downloading plots in PDF format (WYSIWYG)
Example plots:



Supports simultaneous display of multiple genes (gene names are case-insensitive). Tip: Paste multiple gene names directly from Excel
Supports selection of dimensionality reduction methods
Supports split plots
Supports customizing colors for lowest and highest expression levels
Supports setting minimum/maximum expression cutoff (percentile) to trim outliers
Supports showing cluster labels and adjusting label size
Supports adjusting point transparency (alpha)
Supports adjusting the height/width ratio of the plot
Supports adjusting point size
Supports downloading plots in PDF format (WYSIWYG)
Supports switching between assays containing any of the following
slots: counts, data, scale.data
Example plots:



Supports simultaneous display of multiple genes (gene names are case-insensitive). Tip: Paste multiple gene names directly from Excel
Supports selection of cluster resolutions
Supports split plots
Supports stacking and flipping plots, with color mapping selection
Supports adjusting point size and transparency
Supports adjusting font sizes on x and y axes
Supports adjusting the height/width ratio of the plot
Supports downloading plots in PDF format (WYSIWYG)
Supports switching between assays containing any of the following
slots: counts, data, scale.data
Example plots:







Supports simultaneous display of multiple genes (gene names are case-insensitive). Tip: Paste multiple gene names directly from Excel
Supports selection of cluster resolutions and subsetting clusters
Supports split plots
Supports clustering clusters
Supports rotating axes and flipping coordinates
Supports adjusting point size and transparency
Supports adjusting font sizes on x and y axes
Supports adjusting the height/width ratio of the plot
Supports downloading plots in PDF format (WYSIWYG)
Supports switching between assays containing the data slot
Example plots:


Supports simultaneous display of multiple genes (gene names are case-insensitive). Tip: Paste multiple gene names directly from Excel
Supports selection of cluster resolutions and reordering clusters
Supports adjusting font size, horizontal/vertical justification and rotation angle of cluster labels
Supports adjusting the height of group bars
Supports adjusting the line width of group bars
Supports adjusting the font size of gene names
Supports adjusting the height/width ratio of the plot
Supports downloading plots in PDF format (WYSIWYG)
Supports switching between assays containing the data or
scale.data slots
Example plots:

Supports simultaneous display of multiple genes (gene names are case-insensitive). Tip: Paste multiple gene names directly from Excel
Supports selection of cluster resolutions and reordering clusters
Supports adjusting font size and rotation angle of cluster labels
Supports clustering clusters (columns) and clustering features (rows)
Supports adjusting the font size of gene names
Supports adjusting the height/width ratio of the plot
Supports downloading plots in PDF format (WYSIWYG)
Supports switching between assays containing the data slot
Example plots:

Supports simultaneous display of multiple genes (gene names are case-insensitive). Tip: Paste multiple gene names directly from Excel
Supports selection of cluster resolutions and reordering clusters
Supports adjusting the number of columns
Supports stacking plots and color mapping
Supports adjusting font sizes on x and y axes
Supports adjusting the height/width ratio of the plot
Supports downloading plots in PDF format (WYSIWYG)
Supports switching between assays containing any of the following
slots: counts, data, scale.data
Example plots:


Supports faceting
Supports adjusting the height/width ratio of the plot
Supports downloading plots in PDF format (WYSIWYG)
Example plots:


This analysis typically requires more computation time. Please wait
patiently for results to complete. Important: Save your results
before starting a new analysis, as previous results will be overwritten.
Results can be downloaded in csv format.
Find markers for all clusters: Identifies marker genes for each cluster
Calculate DEGs for custom groups: Compare differential expression between two user-defined groups. You can subset cells (with one or more filter conditions, combined as an intersection) before calculating DEGs between groups, then choose the group column and the case/control levels. By default, all cells from both groups are used
Before running the analysis you can adjust the following parameters (in the Custom Parameters tab):
0.1)wilcox, wilcox_limma, t, negbinom, poisson,
LR, MAST (requires MAST), or DESeq2 (requires DESeq2)0.01)0)After results are shown, selecting a row in the results table reveals links to external gene databases. For Human, Mouse and Fly, links to GeneCards, Ensembl, HGNC, MGI, FlyBase, NCBI and UniProt are provided based on the selected feature type (Symbol, Ensembl ID, or Entrez ID).
counts, data
Screen shots:


A data.frame with a ranked list of putative markers as rows, and associated statistics as columns (p-values, ROC score, etc., depending on the test used (test.use)). The following columns are always present:
avg_logFC: log fold-change of the average expression between the two groups. Positive values indicate that the gene is more highly expressed in the first group
pct.1: The percentage of cells where the gene is detected in the first group
pct.2: The percentage of cells where the gene is detected in the second group
p_val_adj: Adjusted p-value, based on bonferroni correction using all genes in the dataset
Highly expressed genes can reflect the main functions of cells. There
are two approaches to identifying these genes: Find Top Genes by Cell
identifies genes that are highly expressed in individual cells (even if
only in a few cells), while Find Top Genes by Accumulated UMI counts
tends to find genes with high accumulated expression across most cells
in a cluster.
Step 1: For each cell, identify genes with high UMI percentage. For
example, if a cell has 10,000 UMIs and the UMI percentage cutoff is
set to 0.01, all genes with more than 10,000 × 0.01 = 100 UMIs are
considered highly expressed in that cell.
Step 2: Summarize these genes for each cluster. First, collect all highly expressed genes in a cluster. For each gene, count the number of cells where it is highly expressed, and calculate the mean and median UMI percentage in those highly expressed cells.

celltype: The cluster name as defined by
Choose A Cluster Resolution
total.cells: Total number of cells in this cluster
Gene: Gene that is highly expressed in at least 1 cell in this
cluster
total.pos.cells: Number of cells that express this gene
total.UMI.pct: (All UMIs of this gene) / (Total UMIs of this
cluster)
cut.Cells: Number of cells that highly express this gene
cut.pct.mean: Mean expression percentage in highly expressed cells
cut.pct.median: Median expression percentage in highly expressed
cells
For each cluster, calculate the top n highly expressed genes by
accumulated UMI counts. Clusters with fewer than 3 cells will be
skipped.
counts slot
celltype: The cluster name as defined by
Choose A Cluster Resolution
total.cells: Total number of cells in this cluster
Gene: The top n highly expressed genes
total.pos.cells: Number of cells that express this gene
MeanUMICounts: (Total accumulated UMI counts) / (Total cells of this
cluster)
PCT: (Total accumulated UMI counts of the gene) / (Total UMIs of
cluster cells)
Summarize features of interest by cluster, including positive cell percentage and mean/median expression levels.
data slot
CellType: The cluster name as defined by
Choose A Cluster Resolution
TotalCells: Total number of cells in this cluster
Gene: The input genes
PCT: The percentage of cells expressing this gene in this cluster
Expr.mean: The mean normalized expression in this cluster
Expr.median: The median normalized expression in this cluster
Calculates correlation values for gene pairs within cells from a cluster. Supports both Pearson and Spearman correlation methods.
data slotFind Top Correlated Gene Pairs: Identifies the top 1000 correlated
gene pairs
Find Top Correlated Genes for A Gene: Finds the most correlated
genes for a user-specified gene
Calculate Correlation of All Pairs in A Gene List: Calculates
correlation values for all pairs in a user-provided gene list


GeneA: The first gene in a gene pair
GeneB: The second gene in a gene pair
correlation: The correlation value
Note: If no results are returned, this is typically because the input genes have very low expression levels. Very lowly expressed genes are removed before analysis.
You can rename cluster names, and changes will take effect immediately. However, the original Seurat object file is never modified. Once you close the session, the new annotations will be lost. You can download a mapping file of old names to new names and send it to a bioinformatician to request permanent changes to the Seurat object.
To rename clusters: select a cluster resolution, edit the New_Name
column in the table, then click Check to preview the re-colored
dimension-reduction plot, and finally Update to add the new
annotation. You can download the old-to-new name mapping.
Group cells into new clusters based on a single gene’s expression level using user-defined cutoffs.
<gene>_cluster)
to the cell metadata.counts or data
slotsCombine two existing cluster annotations into a single new grouping.
-,
+, or _), then click Generate.NewName column.A mapping file can be downloaded for permanent changes to the Seurat object.
Score each cell with a gene set using Seurat’s AddModuleScore.
counts or data
slotsAll features (genes) extracted from the row names of the assay can be searched.
counts, data, scale.data
The metadata of all cells extracted from the meta.data slot of the Seurat object contains descriptive information for each cell, such as quality control metrics, cell type classifications, batch information, and experimental conditions. This metadata is crucial for organizing, filtering, integrating, and visualizing single-cell RNA-seq data.
csv format for further
analysis
The Seurat object is an S4 class in R designed to store and manage single-cell expression data and associated analyses. It is a highly structured and self-contained object, allowing for the integration of various data modalities and analytical results.
Key Slots and their Contents:
assays: This is a list containing one or more Assay objects. Each Assay object represents a specific type of expression data. Each Assay object itself contains slots like counts (raw data), data (normalized data), scale.data (scaled data), and meta.features (feature-level metadata).
meta.data: A data frame storing cell-level metadata. This includes information such as the number of features detected per cell (nFeature_RNA), original identity classes (orig.ident), and can be extended with additional information (e.g., cell type annotations, sample information).
active.assay: A character string indicating the name of the currently active or default assay for analysis.
active.ident: Stores the active cluster identity for each cell, typically resulting from clustering analyses.
reductions: A list of DimReduc objects, each representing a dimensionality reduction technique applied to the data (e.g., PCA, UMAP, tSNE). These objects store the lower-dimensional embeddings of the cells.
graphs: A list of Graph objects, typically storing nearest-neighbor graphs used in clustering and other analyses. images: For spatial transcriptomics data, this slot stores Image objects containing spatial image data and information linking spots to their physical locations.
project.name: A character string holding the name of the project.
misc: A list for storing miscellaneous information not fitting into other specific slots.
You’re reading the tutorial right now!
For the best experience with SeuratExplorer, ensure your Seurat object contains:
RNA, ATAC, etc.)umap, tsne, or pca)meta.data slot) with cluster informationseurat_clusters at different
resolutions).rds: Standard R data format (smaller files, faster I/O).qs2: QSZ compression format (better compression for large
objects)MaxInputFileSize
parameter).qs2 format for better compression of large objects# Basic Seurat preprocessing
library(Seurat)
# Load your data
seurat_obj <- Read10X(data.dir = "path/to/data")
seurat_obj <- CreateSeuratObject(counts = seurat_obj)
# Standard processing
seurat_obj <- NormalizeData(seurat_obj)
seurat_obj <- FindVariableFeatures(seurat_obj)
seurat_obj <- ScaleData(seurat_obj)
seurat_obj <- RunPCA(seurat_obj)
seurat_obj <- RunUMAP(seurat_obj, dims = 1:30)
# Clustering at multiple resolutions
seurat_obj <- FindNeighbors(seurat_obj, dims = 1:30)
seurat_obj <- FindClusters(seurat_obj, resolution = 0.4)
seurat_obj <- FindClusters(seurat_obj, resolution = 0.8)
# Save for SeuratExplorer
saveRDS(seurat_obj, "my_seurat_object.rds")
# or
qs2::qs_save(seurat_obj, "my_seurat_object.qs2")
Q: Can I use SeuratExplorer with Seurat v3 objects?
A: Yes! SeuratExplorer automatically updates old Seurat objects when
loading. However, for very old versions (v2 or earlier), manual update
using UpdateSeuratObject() may be required before use.
Q: Is my data uploaded to any server?
A: No. When running locally (launchSeuratExplorer()), all data stays
on your computer. Only when deployed on a Shiny Server would data be
uploaded to that server.
Q: Can I save my analysis results?
A: Yes! Most visualizations can be downloaded as PDF files. Analysis results (DEGs, feature summaries, etc.) can be downloaded as CSV files. Cluster name mappings can also be exported.
Q: What’s the difference between the two “Top Expressed Features” methods?
A: - Find Top Genes by Cell: Identifies genes that are highly expressed in individual cells, useful for finding cell-specific markers - Find Top Genes by Mean UMI: Finds genes with high average expression across all cells in a cluster, useful for identifying cluster characteristics
Q: How do I add custom color palettes?
A: While SeuratExplorer includes many predefined color palettes, you can
use the getColors() function in your own R scripts to access these
palettes for custom visualizations.
satijalab/seurat: Seurat is an R toolkit for single cell genomics, developed and maintained by the Satija Lab at NYGC. SeuratExplorer builds upon Seurat’s powerful analysis capabilities to provide interactive visualization.
rstudio/shiny: Shiny is an R package that makes it easy to build interactive web apps straight from R. SeuratExplorer uses Shiny to create its interactive dashboard.
ggplot2: A system for declaratively creating graphics, based on “The Grammar of Graphics”. SeuratExplorer uses ggplot2 for all its visualizations.
ComplexHeatmap: Bioconductor package for making complex heatmaps with annotations.
shinydashboard: Create dashboards with Shiny. SeuratExplorer uses this for its admin-style interface.
Hla-Lab/SeuratExplorer: An interactive R shiny application for exploring scRNAseq data processed in Seurat (another implementation with similar goals).
junjunlab/scRNAtoolVis: Some useful functions to make your scRNA-seq plots more beautiful. Some code from this package has been adapted in SeuratExplorer.
rstudio/shiny-server: Shiny Server is a server program that makes Shiny applications available over the web. Use this to deploy SeuratExplorer on a server for multi-user access.
?function_name in
RIf you use SeuratExplorer in your research, please cite:
@software{seuratexplorer2025,
title = {SeuratExplorer: An Shiny App for Exploring scRNA-seq Data Processed in Seurat},
author = {Zhang, Yongchao},
year = {2025},
url = {https://github.com/fentouxungui/SeuratExplorer},
note = {R package version 0.1.9}
}
This package is licensed under GPL (>= 3). See LICENSE.md for details.
SeuratExplorer is built upon excellent work by:
#> R version 4.6.1 (2026-06-24 ucrt)
#> Platform: x86_64-w64-mingw32/x64
#> Running under: Windows 11 x64 (build 26200)
#>
#> Matrix products: default
#> LAPACK version 3.12.1
#>
#> locale:
#> [1] LC_COLLATE=Chinese (Simplified)_China.utf8
#> [2] LC_CTYPE=Chinese (Simplified)_China.utf8
#> [3] LC_MONETARY=Chinese (Simplified)_China.utf8
#> [4] LC_NUMERIC=C
#> [5] LC_TIME=Chinese (Simplified)_China.utf8
#>
#> time zone: Asia/Shanghai
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> loaded via a namespace (and not attached):
#> [1] compiler_4.6.1 fastmap_1.2.0 cli_3.6.6 tools_4.6.1
#> [5] htmltools_0.5.9 otel_0.2.0 rstudioapi_0.19.0 yaml_2.3.12
#> [9] rmarkdown_2.32 knitr_1.52 xfun_0.60 digest_0.6.39
#> [13] rlang_1.3.0 evaluate_1.0.5