SeuratExplorer

A Shiny App for Exploring scRNA-seq Data Processed in Seurat

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.

Why build this R package

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. SeuratExplorer is 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 install SeuratExplorer. Alternatively, users can upload their Seurat object files to a server deployed with Shiny Server and SeuratExplorer for browser-based access.

Available on ShinyApps

This app is now available on ShinyApps, a desktop app store for Shiny Apps that allows users to install, run, update, and uninstall apps.

Key Features

News

The Windows desktop app is now ready. You can download it from the releases page.

Installation

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:

Run app on local

library(SeuratExplorer)
launchSeuratExplorer()

You can customize the launch behavior with additional parameters:

# Example with custom parameters
launchSeuratExplorer(
  verbose = TRUE,
  ReductionKeyWords = c("umap", "tsne", "pca"),
  MaxInputFileSize = 10*1024^3  # 10GB
)

Deploy on server

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()

Assay option

Seurat Assay

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:

Assay Slot Support by Feature

Different visualization features support different assay slots:

Introduction

Load data

Dimensional Reduction Plot

Example plots:

Feature Plot

Example plots:

Violin Plot

Example plots:

Dot Plot

Example plots:

Heatmap for cell level expression

Example plots:

Heatmap for group averaged expression

Example plots:

Ridge Plot

Example plots:

Plot Cell Percentage

Example plots:

Find Cluster Markers and DEGs Analysis

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.

Two analysis modes supported

Custom parameters

Before running the analysis you can adjust the following parameters (in the Custom Parameters tab):

External gene annotation links (Only avaliable for github version)

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).

Screen shots:

Output description

FindMarkers(object, …)

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

Top Expressed Features

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.

1. Find Top Genes by Cell

How it works

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.

Output description

2. Find Top Genes by Accumulated UMI Counts

For each cluster, calculate the top n highly expressed genes by accumulated UMI counts. Clusters with fewer than 3 cells will be skipped.

Output description

Feature Summary

Summarize features of interest by cluster, including positive cell percentage and mean/median expression levels.

Output description

Feature Correlation Analysis

Calculates correlation values for gene pairs within cells from a cluster. Supports both Pearson and Spearman correlation methods.

Three analysis modes

Output description

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.

Rename cluster names

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.

Gene Based Cluster (BETA)

Group cells into new clusters based on a single gene’s expression level using user-defined cutoffs.

  1. Enter a gene symbol, select the assay/slot, and click Generate Histogram to plot the expression distribution.
  2. Enter comma-separated cutoff values and click Apply Cutoffs to define expression intervals.
  3. Edit the group names in the classification table, then click Check to validate names.
  4. Click Submit to add a new factor column (named <gene>_cluster) to the cell metadata.

Combination Based Cluster (BETA)

Combine two existing cluster annotations into a single new grouping.

  1. Select a first and second cluster resolution and a connector (-, +, or _), then click Generate.
  2. Review the combination table (with cell counts), optionally edit the NewName column.
  3. Click Submit to add the combined annotation as a new factor column in the cell metadata.

A mapping file can be downloaded for permanent changes to the Seurat object.

Module Score (BETA)

Score each cell with a gene set using Seurat’s AddModuleScore.

  1. Paste gene symbols and click Check Genes to validate them (matched genes are kept, missing genes are reported).
  2. Enter a score name (letters, numbers and underscore only) and click Compute Module Score.
  3. The resulting numeric score is added to the cell metadata and can be explored in Feature Plot, Violin Plot, or Ridge Plot by entering the score name as a feature.

Search Features

All features (genes) extracted from the row names of the assay can be searched.

Cell Metadata

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.

Structure of Seurat Object

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.

About

You’re reading the tutorial right now!

Data Preparation Tips

Preparing Your Seurat Object

For the best experience with SeuratExplorer, ensure your Seurat object contains:

  1. Required Elements:
    • At least one assay with data (RNA, ATAC, etc.)
    • Dimensional reductions (umap, tsne, or pca)
    • Cell metadata (meta.data slot) with cluster information
  2. Recommended Elements:
    • Multiple cluster resolutions (e.g., seurat_clusters at different resolutions)
    • Sample or batch information in metadata
    • Cell type annotations (can be added interactively in the app)
    • Quality control metrics (nCount_RNA, nFeature_RNA, percent.mt, etc.)
  3. File Formats:
    • .rds: Standard R data format (smaller files, faster I/O)
    • .qs2: QSZ compression format (better compression for large objects)
  4. File Size Considerations:
    • Maximum upload size: 20GB (configurable via MaxInputFileSize parameter)
    • For large datasets, consider subsetting or using data with fewer cells
    • Use .qs2 format for better compression of large objects

Example Preprocessing Code

# 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")

FAQ

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.

Key related packages

Core Dependencies

Visualization Dependencies

Related Projects

Contributing and Support

Getting Help

Citation

If 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}
}

License

This package is licensed under GPL (>= 3). See LICENSE.md for details.

Acknowledgments

SeuratExplorer is built upon excellent work by:

中文介绍

微信公众号: 分析力工厂

Session Info

#> 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