本章导航

1. Seurat 简介 2. Seurat 对象与数据结构 3. Seurat 示例数据说明 4. 标准分析流程概览 5. 常用图形类型与解读 · 质控相关图 · 降维与分群图 · 基因表达图 · 差异与 Marker 图 6. 可复制粘贴的示例代码 · 6.0 RStudio 新建项目 · 6.1 环境与数据 · 6.2 质控 · 6.3 标准流程 · 6.4 可视化 · 6.5 差异与 Marker 图

单细胞数据分析(Seurat)

1. Seurat 简介

Seurat 是 R 语言中用于单细胞 RNA 测序(scRNA-seq)数据分析的主流工具包,由 Satija Lab 开发并维护。它覆盖从原始表达矩阵到细胞分群、细胞类型注释、差异表达与可视化的完整流程。

2. Seurat 对象与数据结构

所有数据与中间结果都存放在一个 Seurat 对象 中。对象内包含:

3. Seurat 示例数据说明

Seurat 官方教程常用 PBMC 3K 作为示例数据集,便于在本地快速复现完整流程。

3.1 数据来源与获取

3.2 示例数据包含的细胞类型

经过聚类与注释后,PBMC 3K 中通常可区分出多种免疫细胞类型,例如:

教程会演示如何从原始矩阵得到这些细胞类型标签及对应的 Marker 基因。

提示:使用示例数据时无需自己下载 10X 原始数据,可直接用 SeuratDatapbmc3k 或教程提供的 R 代码生成“模拟”对象,重点学习对象结构与绘图函数。

4. 标准分析流程概览

使用 Seurat 做单细胞分析时,典型步骤包括:

  1. 创建对象CreateSeuratObject(),并(可选)计算 percent.mt
  2. 质控:按 nFeature_RNAnCount_RNApercent.mt 过滤低质量细胞。
  3. 归一化NormalizeData()(默认 LogNormalize)。
  4. 高变基因FindVariableFeatures()
  5. 标准化ScaleData()(用于 PCA 的基因)。
  6. 降维RunPCA()RunUMAP() / RunTSNE()
  7. 聚类FindNeighbors() + FindClusters()
  8. 注释与可视化:根据 Marker 注释细胞类型,并绘制各类图。

5. 常用图形类型与解读

下面按“质控 → 降维/分群 → 基因表达 → Marker/差异”顺序,说明 Seurat 中常用图的含义与对应函数。

5.1 质控相关图

图形 函数(示例) 含义
小提琴图(QC 指标) VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt")) 展示每个细胞(或按分组)的基因数、总 UMI 数、线粒体比例分布,用于设定质控阈值、发现异常样本。
散点图(基因数 vs UMI) FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA") 看 nCount 与 nFeature 的相关性,通常呈正相关;离群点可能是双细胞或破损细胞。

5.2 降维与分群图

图形 函数(示例) 含义
UMAP / t-SNE 分群图 DimPlot(pbmc, reduction = "umap", group.by = "seurat_clusters") 在 UMAP(或 t-SNE)二维空间中按聚类或注释标签着色,展示细胞群分布与分离程度。
PCA 双标图 DimPlot(pbmc, reduction = "pca")VizDimLoadings() 展示主成分上的细胞分布或各基因对主成分的贡献(loading),用于理解驱动差异的主成分。
肘部图 ElbowPlot(pbmc) 各主成分解释的方差比例,用于选择保留的 PC 数量(通常取“肘部”附近)。

5.3 基因表达图

图形 函数(示例) 含义
降维图上的基因表达 FeaturePlot(pbmc, features = "CD3D") 在 UMAP/t-SNE 上用颜色表示某个基因的表达量,用于看该基因在哪些细胞/区域高表达,辅助细胞类型判断。
小提琴图(基因表达) VlnPlot(pbmc, features = "CD3D", group.by = "seurat_clusters") 按 cluster(或细胞类型)展示某基因表达量分布,比较不同群之间表达差异。
脊线图 RidgePlot(pbmc, features = "CD3D", group.by = "seurat_clusters") 类似小提琴图,以脊线形式展示各群中某基因的表达分布,适合多群对比。

5.4 差异与 Marker 图

图形 函数(示例) 含义
点图(DotPlot) DotPlot(pbmc, features = marker_genes) + RotatedAxis() 横轴为基因,纵轴为 cluster(或细胞类型);点大小表示表达该基因的细胞比例,颜色表示平均表达量,用于快速对比多个 Marker 在各群中的表达。
热图(DoHeatmap) DoHeatmap(pbmc, features = top_markers, size = 3) 对每个 cluster 的 top marker 基因做热图,行是基因、列是细胞(常按 cluster 排列),颜色为标准化表达,用于展示各群特征基因表达模式。
气泡图(比例 + 表达) 同上 DotPlot,有时与 scale = TRUE 等参数联用 与 DotPlot 一致,强调“表达比例”与“平均表达”两个维度,是 Marker 展示最常用的图之一。

上述图中,DimPlotFeaturePlotVlnPlotDotPlotDoHeatmap 是 Seurat 教程中最常出现的五类图,分别对应:分群展示、基因在空间上的表达、基因在各群分布、多基因多群对比、Marker 热图。

6. 可复制粘贴的 Seurat 示例代码

每一小节为「一段说明 + 一段代码」,按顺序复制到 R 中运行即可。建议先在 RStudio 中新建项目(见 6.0),再完成 6.1 环境与数据,最后按 6.2~6.5 做质控、流程、出图。

6.0 在 RStudio 中新建项目

新建项目便于统一管理脚本、数据和结果,且每次打开项目即进入对应工作目录。项目名称建议与本次分析相关,例如 seurat-pbmc(Seurat + PBMC 示例)或 single-cell-seurat

  1. 打开 RStudio,菜单栏选择 File → New Project…
  2. 选择 New Directory,再选 New Project
  3. Directory name 填写:seurat-pbmc(或 single-cell-seurat);Create project as subdirectory of 选择你想保存的父文件夹,点击 Create Project

创建完成后,RStudio 会打开该项目,工作目录即为该文件夹。后续可将 R 脚本保存于此,运行时代码中的相对路径均相对于该目录。

6.1 环境与数据

6.1.1 安装 Seurat(使用国内 CRAN 镜像加速)

先设置 CRAN 为国内镜像(如清华),再安装 Seurat,可显著加快下载。只需在首次使用或更新包时执行。

options(repos = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
install.packages("Seurat")

6.1.2 安装 SeuratData 与示例数据集 pbmc3k

SeuratData 提供官方示例数据。先从 GitHub 安装 SeuratData 包,再下载 pbmc3k 数据集(约 2,700 细胞)。若 GitHub 较慢,可多试几次或配置网络。

if (!requireNamespace("remotes", quietly = TRUE)) install.packages("remotes")
remotes::install_github("satijalab/seurat-data")

library(SeuratData)
InstallData("pbmc3k")

6.1.3 加载包

每次打开 R 做单细胞分析前,先加载 Seurat 与 SeuratData。

library(Seurat)
library(SeuratData)

6.1.4 加载示例数据并赋给变量

将内置的 pbmc3k 数据载入内存,并统一用 pbmc 作为对象名。若出现 “Please run UpdateSeuratObject on your object”,说明对象是旧版 Seurat 格式,需运行 UpdateSeuratObject(pbmc) 转为当前版本后再继续。

data("pbmc3k")
pbmc <- pbmc3k
pbmc <- UpdateSeuratObject(pbmc)

6.1.5 计算线粒体基因比例(percent.mt)

pbmc3k 的 meta 里默认没有 percent.mt,需要先算出来,后面的质控小提琴图才能画三张(含线粒体比例)。线粒体基因名通常以 MT- 开头。

pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")

6.2 质控

6.2.1 质控小提琴图(基因数、UMI 数、线粒体比例)

查看每个细胞检测到的基因数、总 UMI 数、线粒体基因占比的分布,用于设定过滤阈值或发现异常样本。若只有两幅图、提示 variables were not found: percent.mt,请先运行上面 6.1.5 计算 percent.mt

VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
质控小提琴图:nFeature_RNA、nCount_RNA、percent.mt
图 6.2.1 质控小提琴图示例(运行 scripts/seurat_generate_figures.R 可生成)

结果解读:可据此观察基因数、UMI 数、线粒体比例的分布范围与离群点,从而设定质控阈值(如 nFeature_RNA 200–2500、percent.mt < 5%)并过滤低质量细胞。

6.2.2 质控散点图(nCount vs nFeature)

看总 UMI 与检测基因数的相关性;离群点可能是双细胞或破损细胞。

FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
质控散点图:nCount_RNA vs nFeature_RNA
图 6.2.2 质控散点图示例

结果解读:nCount 与 nFeature 通常呈正相关;若出现明显偏离主云团的点,可能是双细胞或破损细胞,应在质控时剔除。

6.3 标准分析流程

6.3.1 归一化

对 raw count 做对数归一化,使细胞间可比。默认方法为 LogNormalize。

pbmc <- NormalizeData(pbmc)

6.3.2 识别高变基因

筛选在细胞间变异较大的基因,用于后续降维与聚类,默认取 2000 个。

pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)

6.3.3 标准化(Scale)

对高变基因做中心化与缩放,得到 scale.data,供 PCA 使用。

pbmc <- ScaleData(pbmc)

6.3.4 主成分分析(PCA)

在高变基因的 scale 矩阵上做 PCA,得到低维表示。后续用前若干主成分做聚类与 UMAP。

pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

6.3.5 构建邻接图并聚类

基于前 10 个主成分构建 KNN 图,再用 Louvain 等算法得到细胞聚类标签(seurat_clusters)。resolution 越大簇越多。

pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)

6.3.6 UMAP 降维

在 PCA 基础上计算 UMAP 二维坐标,用于可视化分群与基因表达。

pbmc <- RunUMAP(pbmc, dims = 1:10)

6.4 可视化

6.4.1 分群图(UMAP 上按 cluster 着色)

在 UMAP 空间中展示各聚类,每点一个细胞,颜色为 seurat_clusters

DimPlot(pbmc, reduction = "umap", group.by = "seurat_clusters")
UMAP 分群图
图 6.4.1 UMAP 分群图示例

结果解读:不同颜色代表不同 cluster,可直观看出细胞在 UMAP 空间中的分群是否清晰、是否有过度分裂或合并,为后续细胞类型注释提供空间依据。

6.4.2 基因在 UMAP 上的表达(FeaturePlot)

在 UMAP 上用颜色表示指定基因的表达量,用于判断该基因在哪些细胞/区域高表达。

FeaturePlot(pbmc, features = c("CD3D", "CD14", "MS4A1"))
FeaturePlot:CD3D、CD14、MS4A1
图 6.4.2 基因在 UMAP 上的表达(CD3D、CD14、MS4A1)

结果解读:CD3D 高表达区对应 T 细胞群,CD14 高表达区对应单核细胞群,MS4A1 高表达区对应 B 细胞群,可与分群图结合判断各 cluster 的细胞类型。

6.4.3 按 cluster 的基因表达小提琴图

按聚类展示某基因的表达分布,比较不同群之间的表达差异。

VlnPlot(pbmc, features = "CD3D", group.by = "seurat_clusters")
按 cluster 的 CD3D 小提琴图
图 6.4.3 CD3D 在各 cluster 的表达分布

结果解读:CD3D 在部分 cluster 中明显高表达、在其余 cluster 中较低,可帮助确认哪些 cluster 为 T 细胞相关,并评估 Marker 的特异性。

6.4.4 脊线图

与小提琴图类似,以脊线形式展示各群中某基因的表达分布。

RidgePlot(pbmc, features = "CD3D", group.by = "seurat_clusters")
CD3D 脊线图
图 6.4.4 CD3D 脊线图示例

结果解读:脊线峰的位置与高度反映各 cluster 中 CD3D 表达水平,便于在多群并排时快速比较 T 细胞相关 cluster 与其他群的差异。

6.5 差异基因与 Marker 图

6.5.1 为每个 cluster 找 Marker 基因

对每个聚类做差异表达,得到该群相对其他群高表达的基因(只保留正标记、满足最小表达比例与 logFC 阈值)。

markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)

6.5.2 每群取 top 10 基因(base R)

按 cluster 和 avg_log2FC 排序,每个 cluster 保留前 10 个基因,供 DotPlot/DoHeatmap 使用。

top10 <- markers[order(markers$cluster, -markers$avg_log2FC), ]
top10 <- do.call(rbind, lapply(split(top10, top10$cluster), head, 10))
top_genes <- unique(top10$gene)

6.5.3 点图(DotPlot)

横轴为基因、纵轴为 cluster;点大小表示表达比例,颜色表示平均表达量,便于对比多基因在多群中的表达。

DotPlot(pbmc, features = top_genes) + RotatedAxis()
各 cluster 的 Marker 点图
图 6.5.3 DotPlot 示例

结果解读:点大且颜色深的基因在该 cluster 中表达比例高、平均表达强,可据此快速识别各群的特征 Marker,辅助细胞类型命名与验证。

6.5.4 Marker 热图(DoHeatmap)

对上述 top 基因做热图,行是基因、列是细胞(按 cluster 排列),展示各群特征表达模式。

DoHeatmap(pbmc, features = top_genes, size = 3)
Marker 热图
图 6.5.4 DoHeatmap 示例

结果解读:每列为一个细胞、每行为一个 Marker 基因,颜色表示标准化表达;可看出各 cluster 对应的基因表达模式,用于确认分群与注释是否合理。

说明:本节示例图由项目内脚本 scripts/seurat_generate_figures.R 生成(需已安装 Seurat 与 SeuratData 并成功加载 pbmc3k)。在项目根目录执行 Rscript scripts/seurat_generate_figures.R 即可将图片写入 docs/images/seurat/。若 pbmc3k 已通过 InstallData("pbmc3k") 安装,只需运行 6.1.3、6.1.4 即可加载。调整 FindClusters(..., resolution = 0.5) 中的 resolution(如 0.3~1.0)可改变聚类粗细;可根据已知 Marker 将 seurat_clusters 重命名为细胞类型后再绘图。