20260912 091245 Seurat V5 Pbmc 3K 单细胞分析完整教程

20260912_091245_Seurat_v5_PBMC_3k_单细胞分析完整教程.md

Seurat v5 PBMC 3k 单细胞分析完整教程

基于 Seurat v5.5.1 官方教程,从零开始跑通单细胞 RNA-seq 标准分析全流程。


1. 概述

1.1 数据集

项目 说明
数据来源 10X Genomics PBMC(外周血单核细胞)
细胞数 2,700
测序平台 Illumina NextSeq 500
参考基因组 hg19
数据格式 10X CellRanger 输出(barcodes.tsv, genes.tsv, matrix.mtx)

1.2 分析流程

读取数据 -> QC过滤 -> 归一化 -> 高变基因 -> 标准化 -> PCA
-> 确定维度 -> 聚类 -> UMAP -> 寻找Marker -> 细胞类型注释

1.3 环境信息

软件 版本
R 4.6.1 (2026-06-24, “Happy Hop”)
Seurat 5.5.1
SeuratObject 5.4.0
操作系统 Windows (D盘安装: D:\r)

2. 环境准备

2.1 安装 R 和 RStudio

R 和 RStudio 安装在 D:\r 目录下:

  • R 4.6.1: D:\r\R-4.6.1
  • RStudio 2026.09.0: D:\r\RStudio

2.2 配置 CRAN 国内镜像

编辑 D:\r\R-4.6.1\etc\Rprofile.site,添加:

# set a CRAN mirror (TUNA Tsinghua)
local({r <- getOption("repos")
      r["CRAN"] <- "https://mirrors.tuna.tsinghua.edu.cn/CRAN"
      options(repos=r)})

2.3 安装 Seurat

install.packages("Seurat")

从清华镜像下载,100+ 依赖包全部自动安装,无报错。


3. 完整分析流程

3.1 读取数据 & 创建 Seurat 对象

library(dplyr)
library(Seurat)
library(patchwork)
library(ggplot2)

# 设置路径
data_dir <- "E:/BaiduNetdiskDownload/生物信息学/pbmc3k_tutorial/data/filtered_gene_bc_matrices/hg19"
output_dir <- "E:/BaiduNetdiskDownload/生物信息学/pbmc3k_tutorial/output"
dir.create(output_dir, showWarnings = FALSE, recursive = TRUE)

# 读取 10X 数据
pbmc.data <- Read10X(data.dir = data_dir)

# 创建 Seurat 对象
# min.cells = 3: 至少在3个细胞中检测到的基因才保留
# min.features = 200: 每个细胞至少检测到200个基因才保留
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k",
                           min.cells = 3, min.features = 200)

结果:13,714 个基因,2,700 个细胞,1 个 Assay(RNA)。

稀疏矩阵示例(. 代表 0,节省内存约 24 倍):

        AAACATACAACCAC-1 AAACATTGAGCTAC-1 AAACATTGATCAGC-1 ...
CD3D    4                .                10               ...
TCL1A   .                .                .                ...
MS4A1   .                6                .                ...

3.2 质量控制(QC)& 细胞过滤

# 计算线粒体基因表达比例
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")

# 过滤条件:
#   nFeature_RNA > 200   (去除空液滴)
#   nFeature_RNA < 2500  (去除 doublet)
#   percent.mt < 5       (去除线粒体污染严重的细胞)
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)

过滤后:2,700 到 2,638 个细胞(去除 62 个低质量细胞)。

QC 小提琴图 – 展示 nFeature_RNA、nCount_RNA、percent.mt 的分布:

QC小提琴图

QC 散点图 – 展示 nCount_RNA 与 percent.mt / nFeature_RNA 的关系:

QC散点图

3.3 数据归一化

# LogNormalize: 每个细胞表达量除以总UMI,乘10000,再取log
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)

3.4 识别高变基因

# 默认选择 2000 个高变基因,用于下游 PCA
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)

Top 10 高变基因:PPBP, LYZ, S100A9, IGLL5, GNLY, FTL, PF4, FTH1, GNG11, S100A8

高变基因图

3.5 数据标准化

# 对每个基因做 Z-score 标准化(均值=0, 方差=1)
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)

3.6 线性降维(PCA)

# 对高变基因做 PCA
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

前5个主成分的标记基因:

PC Positive(正加载) Negative(负加载)
PC1 CST3, TYROBP, LST1, AIF1, FTL MALAT1, LTB, IL32, IL7R, CD2
PC2 CD79A, MS4A1, TCL1A, HLA-DQA1, HLA-DQB1 NKG7, PRF1, CST7, GZMB, GZMA
PC3 HLA-DQA1, CD79A, CD79B, HLA-DQB1, HLA-DPB1 PPBP, PF4, SDPR, SPARC, GNG11
PC4 HLA-DQA1, CD79B, CD79A, MS4A1, HLA-DQB1 VIM, IL7R, S100A6, IL32, S100A8
PC5 GZMB, NKG7, S100A8, FGFBP2, GNLY LTB, IL7R, CKB, VIM, MS4A7

PCA散点图

PCA负载图

PCA热图

3.7 确定数据维度

# ElbowPlot: 按方差解释比例排序各 PC,拐点处即为建议维度
ElbowPlot(pbmc)

拐点约在 PC 9-10,本教程选取 10 个 PC 用于下游分析。

Elbow拐点图

3.8 细胞聚类

# 基于 PCA 空间构建 KNN 图
pbmc <- FindNeighbors(pbmc, dims = 1:10)

# Louvain 算法聚类,resolution=0.5 适合约3K细胞
pbmc <- FindClusters(pbmc, resolution = 0.5)

聚类结果:9 个聚类,模块化度 0.8728

Number of nodes: 2638
Number of edges: 95927
Number of communities: 9

3.9 非线性降维(UMAP)

pbmc <- RunUMAP(pbmc, dims = 1:10)
DimPlot(pbmc, reduction = "umap")

UMAP聚类图

3.10 寻找差异表达基因(Marker Genes)

# 为每个聚类寻找特异性标记基因
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE)

各聚类 Marker 数量:

聚类 Marker 数(log2FC > 1)
0 214
1 1,190
2 384
3 543
4 344
5 1,241
6 891
7 1,589
8 623

Marker 热图 – 每个聚类 top 10 基因:

Marker热图

FeaturePlot – 经典 marker 基因在 UMAP 上的表达:

FeaturePlot

小提琴图 – 特定 marker 的表达分布:

小提琴图

3.11 细胞类型注释

根据 canonical markers 将聚类映射到已知细胞类型:

聚类 Marker 基因 细胞类型
0 IL7R, CCR7 Naive CD4+ T
1 CD14, LYZ CD14+ Mono(单核细胞)
2 IL7R, S100A4 Memory CD4+ T
3 MS4A1 B(B细胞)
4 CD8A CD8+ T
5 FCGR3A, MS4A7 FCGR3A+ Mono
6 GNLY, NKG7 NK(自然杀伤细胞)
7 FCER1A, CST3 DC(树突状细胞)
8 PPBP Platelet(血小板)
new.cluster.ids <- c("Naive CD4 T", "CD14+ Mono", "Memory CD4 T", "B",
                      "CD8 T", "FCGR3A+ Mono", "NK", "DC", "Platelet")
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)
DimPlot(pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()

注释后UMAP图


4. 分析总结

指标 数值
输入细胞数 2,700
过滤后细胞数 2,638
基因数 13,714
高变基因数 2,000
PCA 维度 10
聚类数 9
细胞类型数 9
Marker 基因总数 7,019(log2FC > 1)

5. 输出文件清单

文件 说明
01_qc_violin.png QC 小提琴图
02_qc_scatter.png QC 散点图
03_variable_features.png 高变基因图
04_pca.png PCA 散点图
05_pca_loadings.png PCA 负载图
06_pca_heatmap.png PCA 热图
07_elbow_plot.png Elbow 拐点图
08_umap.png UMAP 聚类图
09_marker_heatmap.png Marker 热图
10_feature_plot.png Feature 表达图
11_violin_markers.png Marker 小提琴图
12_umap_labeled.png 注释后 UMAP 图
all_markers.csv 全部 Marker 基因表
pbmc_tutorial.rds 中间结果(Seurat 对象)
pbmc3k_final.rds 最终结果(Seurat 对象)

6. 关键知识点回顾

6.1 Seurat 对象结构(v5)

Seurat 对象
|-- assays
|   +-- RNA
|       |-- layers
|       |   |-- counts    # 原始 UMI 计数矩阵
|       |   |-- data       # 归一化后的矩阵
|       |   +-- scale.data # 标准化后的矩阵
|       +-- VariableFeatures  # 高变基因列表
|-- reductions
|   |-- pca               # PCA 降维结果
|   +-- umap              # UMAP 降维结果
|-- meta.data             # 细胞元数据(nCount, nFeature, percent.mt 等)
+-- active.ident          # 当前聚类标签

6.2 标准分析步骤要点

步骤 核心函数 关键参数 目的
读取数据 Read10X() data.dir 读取 10X 输出
创建对象 CreateSeuratObject() min.cells, min.features 初始过滤
QC PercentageFeatureSet() pattern=”^MT-“ 计算线粒体比例
归一化 NormalizeData() LogNormalize, scale.factor=10000 消除细胞间测序深度差异
高变基因 FindVariableFeatures() vst, nfeatures=2000 识别信息量最大的基因
标准化 ScaleData() features=all.genes Z-score 标准化
降维 RunPCA() features=VariableFeatures 线性降维
确定维度 ElbowPlot() - 选择 PC 数量
聚类 FindNeighbors() + FindClusters() dims, resolution 图聚类
可视化 RunUMAP() + DimPlot() dims 2D 可视化
Marker FindAllMarkers() only.pos=TRUE 差异基因分析
注释 RenameIdents() - 映射细胞类型

6.3 常用参数调优建议

  • resolution:0.4-1.2 适合约3K细胞;更大数据集可适当提高
  • PC 数量:建议 7-15 之间,宁多勿少(太少会丢失信号)
  • percent.mt 阈值:常用 5%-10%,不同组织类型可能需要调整
  • nFeature_RNA 过滤:下限 200-500,上限通常取 2500-6000

7. 完整脚本

以下是完整的 R 分析脚本,可直接运行:

###############################################################################
# Seurat v5 PBMC 3k 标准分析流程
# 基于官方教程: https://satijalab.org/seurat/articles/pbmc3k_tutorial
# 数据: 10X Genomics PBMC 2,700 个外周血单核细胞
###############################################################################
#
# 学习目标: 跑通单细胞 RNA-seq 标准分析全流程
# 流程链路: 读取数据 -> QC过滤 -> 归一化 -> 高变基因 -> 标准化 -> PCA
#           -> 确定维度 -> 聚类 -> UMAP -> 寻找marker -> 细胞类型注释
#
###############################################################################


# ============================================================================
# 0. 环境准备
# ============================================================================

library(dplyr)
library(Seurat)
library(patchwork)
library(ggplot2)

# 设置工作目录(请根据实际路径修改)
data_dir <- "E:/BaiduNetdiskDownload/生物信息学/pbmc3k_tutorial/data/filtered_gene_bc_matrices/hg19"
output_dir <- "E:/BaiduNetdiskDownload/生物信息学/pbmc3k_tutorial/output"
dir.create(output_dir, showWarnings = FALSE, recursive = TRUE)


# ============================================================================
# 1. 读取数据 & 创建 Seurat 对象
# ============================================================================
# Read10X() 读取 10X CellRanger 输出目录(包含 barcodes.tsv, genes.tsv, matrix.mtx)
# 返回一个稀疏矩阵: 行=基因, 列=细胞, 值=UMI计数

cat("\n========== 1. 读取数据 ==========\n")
pbmc.data <- Read10X(data.dir = data_dir)

# 创建 Seurat 对象
# min.cells = 3:   至少在 3 个细胞中检测到的基因才保留
# min.features = 200: 每个细胞至少检测到 200 个基因才保留
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k",
                           min.cells = 3, min.features = 200)
print(pbmc)

# 查看计数矩阵的稀疏性(大多数值为 0,用稀疏矩阵存储节省内存)
cat("\n--- 稀疏矩阵示例(前30个细胞中3个基因)---\n")
print(pbmc.data[c("CD3D", "TCL1A", "MS4A1"), 1:30])


# ============================================================================
# 2. 质量控制(QC)& 细胞过滤
# ============================================================================
# 常用 QC 指标:
#   - nFeature_RNA: 每个细胞检测到的独特基因数(过低=空液滴/低质量,过高=doublet)
#   - nCount_RNA:   每个细胞检测到的分子总数(UMI总数)
#   - percent.mt:   线粒体基因占比(过高=低质量/凋亡细胞)

cat("\n========== 2. 质量控制 ==========\n")

# 计算线粒体基因表达比例(基因名以 MT- 开头)
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")

# 查看 QC 统计
cat("\n--- QC 指标(前5个细胞)---\n")
print(head(pbmc@meta.data, 5))

# 可视化 QC 指标(小提琴图)
p_qc_vln <- VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
ggsave(file.path(output_dir, "01_qc_violin.png"), plot = p_qc_vln, width = 12, height = 5, dpi = 150)
cat("已保存: 01_qc_violin.png\n")

# FeatureScatter: 查看指标间关系
p_scatter1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
p_scatter2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
p_qc_scatter <- p_scatter1 + p_scatter2
ggsave(file.path(output_dir, "02_qc_scatter.png"), plot = p_qc_scatter, width = 12, height = 5, dpi = 150)
cat("已保存: 02_qc_scatter.png\n")

# 过滤细胞:
#   nFeature_RNA > 200  (已有 min.features=200 过滤,这里二次确认)
#   nFeature_RNA < 2500 (去除 doublet)
#   percent.mt < 5      (去除线粒体污染严重的细胞)
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
cat("过滤后细胞数:", ncol(pbmc), "\n")


# ============================================================================
# 3. 数据归一化(Normalization)
# ============================================================================
# LogNormalize: 每个细胞的表达量除以该细胞总UMI,乘以10000,再取log
# 结果存储在 pbmc[["RNA"]]$data

cat("\n========== 3. 归一化 ==========\n")
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)
cat("归一化完成\n")


# ============================================================================
# 4. 识别高变基因(Feature Selection)
# ============================================================================
# FindVariableFeatures: 识别在不同细胞间表达变异最大的基因
# 默认选择 2000 个高变基因,用于下游 PCA 降维

cat("\n========== 4. 高变基因识别 ==========\n")
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)

# 查看前10个高变基因
top10 <- head(VariableFeatures(pbmc), 10)
cat("Top 10 高变基因:", paste(top10, collapse = ", "), "\n")

# 可视化高变基因
p_var <- VariableFeaturePlot(pbmc)
p_var_label <- LabelPoints(plot = p_var, points = top10, repel = TRUE)
ggsave(file.path(output_dir, "03_variable_features.png"), plot = p_var + p_var_label, width = 10, height = 7, dpi = 150)
cat("已保存: 03_variable_features.png\n")


# ============================================================================
# 5. 数据标准化(Scaling)
# ============================================================================
# ScaleData: 对每个基因做 Z-score 标准化(均值=0, 方差=1)
# 使下游 PCA 分析中各基因权重一致
# 结果存储在 pbmc[["RNA"]]$scale.data

cat("\n========== 5. 标准化 ==========\n")
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)
cat("标准化完成(", length(all.genes), "个基因)\n")


# ============================================================================
# 6. 线性降维(PCA)
# ============================================================================
# 对标准化后的高变基因做 PCA
# 每个 PC 代表一组相关基因的「元特征」

cat("\n========== 6. PCA 降维 ==========\n")
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

# 查看前5个 PC 的 top 基因
cat("\n--- 前5个主成分的标记基因---\n")
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)

# 可视化 PCA
p_pca <- DimPlot(pbmc, reduction = "pca") + NoLegend()
ggsave(file.path(output_dir, "04_pca.png"), plot = p_pca, width = 7, height = 6, dpi = 150)
cat("已保存: 04_pca.png\n")

# PCA 负载图(前2个 PC)
p_pca_load <- VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")
ggsave(file.path(output_dir, "05_pca_loadings.png"), plot = p_pca_load, width = 10, height = 8, dpi = 150)
cat("已保存: 05_pca_loadings.png\n")

# PCA 热图(前15个 PC)
p_pca_heat <- DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE)
ggsave(file.path(output_dir, "06_pca_heatmap.png"), plot = p_pca_heat, width = 12, height = 15, dpi = 150)
cat("已保存: 06_pca_heatmap.png\n")


# ============================================================================
# 7. 确定数据维度
# ============================================================================
# 选择用于下游分析的主成分数量
# ElbowPlot: 按方差解释比例排序各 PC,拐点处即为建议维度

cat("\n========== 7. 确定维度 ==========\n")
p_elbow <- ElbowPlot(pbmc)
ggsave(file.path(output_dir, "07_elbow_plot.png"), plot = p_elbow, width = 7, height = 5, dpi = 150)
cat("已保存: 07_elbow_plot.png\n")
cat("拐点约在 PC 9-10,本教程选取 10 个 PC\n")


# ============================================================================
# 8. 细胞聚类(Clustering)
# ============================================================================
# FindNeighbors: 基于 PCA 空间构建 KNN 图(K近邻图)
# FindClusters:  使用 Louvain 算法做模块化优化聚类
#   resolution: 聚类粒度,0.4-1.2 适合约 3K 细胞的数据集

cat("\n========== 8. 聚类 ==========\n")
pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)

# 查看聚类结果
cat("\n--- 前5个细胞的聚类 ID ---\n")
print(head(Idents(pbmc), 5))
cat("聚类数量:", length(levels(pbmc)), "\n")


# ============================================================================
# 9. 非线性降维(UMAP)
# ============================================================================
# UMAP: 将高维数据投射到 2D 空间用于可视化
# 注意: UMAP 用于可视化探索,不应仅凭图形下生物学结论

cat("\n========== 9. UMAP ==========\n")
pbmc <- RunUMAP(pbmc, dims = 1:10)

p_umap <- DimPlot(pbmc, reduction = "umap")
ggsave(file.path(output_dir, "08_umap.png"), plot = p_umap, width = 8, height = 7, dpi = 150)
cat("已保存: 08_umap.png\n")

# 保存中间结果(可重新加载,无需重跑前面的步骤)
saveRDS(pbmc, file.path(output_dir, "pbmc_tutorial.rds"))
cat("已保存中间结果: pbmc_tutorial.rds\n")


# ============================================================================
# 10. 寻找差异表达基因(Marker Genes)
# ============================================================================
# FindAllMarkers: 为每个聚类寻找特异性标记基因(与其他所有细胞比较)
# presto 包加速 DE 分析(Seurat v5 自动调用)

cat("\n========== 10. Marker 基因 ==========\n")
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE)

# 筛选 log2FC > 1 的显著 marker
pbmc.markers %>%
    group_by(cluster) %>%
    dplyr::filter(avg_log2FC > 1) -> top_markers

cat("\n--- 各聚类 marker 数量 ---\n")
print(table(top_markers$cluster))

# 保存 marker 表
write.csv(pbmc.markers, file.path(output_dir, "all_markers.csv"), row.names = FALSE)
cat("已保存: all_markers.csv\n")

# 每个聚类取 top 10 基因做热图
top10_all <- pbmc.markers %>%
    group_by(cluster) %>%
    dplyr::filter(avg_log2FC > 1) %>%
    slice_head(n = 10) %>%
    ungroup()

p_heatmap <- DoHeatmap(pbmc, features = top10_all$gene) + NoLegend()
ggsave(file.path(output_dir, "09_marker_heatmap.png"), plot = p_heatmap, width = 12, height = 15, dpi = 150)
cat("已保存: 09_marker_heatmap.png\n")

# FeaturePlot: 在 UMAP 上展示经典 marker 基因表达
p_feature <- FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14",
                                              "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"))
ggsave(file.path(output_dir, "10_feature_plot.png"), plot = p_feature, width = 14, height = 12, dpi = 150)
cat("已保存: 10_feature_plot.png\n")

# VlnPlot: 小提琴图展示特定 marker
p_vln <- VlnPlot(pbmc, features = c("MS4A1", "CD79A"))
ggsave(file.path(output_dir, "11_violin_markers.png"), plot = p_vln, width = 8, height = 5, dpi = 150)
cat("已保存: 11_violin_markers.png\n")


# ============================================================================
# 11. 细胞类型注释
# ============================================================================
# 根据已知 canonical markers 将聚类映射到细胞类型
#
# 聚类  Marker 基因          细胞类型
# 0    IL7R, CCR7           Naive CD4+ T
# 1    CD14, LYZ            CD14+ Mono(单核细胞)
# 2    IL7R, S100A4         Memory CD4+ T
# 3    MS4A1                 B(B细胞)
# 4    CD8A                  CD8+ T
# 5    FCGR3A, MS4A7         FCGR3A+ Mono
# 6    GNLY, NKG7            NK(自然杀伤细胞)
# 7    FCER1A, CST3          DC(树突状细胞)
# 8    PPBP                  Platelet(血小板)

cat("\n========== 11. 细胞类型注释 ==========\n")

new.cluster.ids <- c("Naive CD4 T", "CD14+ Mono", "Memory CD4 T", "B",
                      "CD8 T", "FCGR3A+ Mono", "NK", "DC", "Platelet")
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)

# 带标签的 UMAP 图
p_umap_labeled <- DimPlot(pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()
ggsave(file.path(output_dir, "12_umap_labeled.png"), plot = p_umap_labeled, width = 8, height = 7, dpi = 150)
cat("已保存: 12_umap_labeled.png\n")

# 保存最终结果
saveRDS(pbmc, file.path(output_dir, "pbmc3k_final.rds"))
cat("已保存最终结果: pbmc3k_final.rds\n")


# ============================================================================
# 12. 总结
# ============================================================================

cat("\n")
cat("=======================================================\n")
cat("  PBMC 3k 标准分析流程完成!\n")
cat("=======================================================\n")
cat("  输入细胞数: 2,700\n")
cat("  过滤后细胞数:", ncol(pbmc), "\n")
cat("  聚类数:", length(levels(pbmc)), "\n")
cat("  细胞类型: Naive CD4 T / CD14+ Mono / Memory CD4 T / B /\n")
cat("           CD8 T / FCGR3A+ Mono / NK / DC / Platelet\n")
cat("  输出目录:", output_dir, "\n")
cat("  输出文件:\n")
cat("    01_qc_violin.png       - QC小提琴图\n")
cat("    02_qc_scatter.png      - QC散点图\n")
cat("    03_variable_features.png - 高变基因图\n")
cat("    04_pca.png             - PCA散点图\n")
cat("    05_pca_loadings.png    - PCA负载图\n")
cat("    06_pca_heatmap.png     - PCA热图\n")
cat("    07_elbow_plot.png      - 拐点图\n")
cat("    08_umap.png            - UMAP聚类图\n")
cat("    09_marker_heatmap.png  - Marker热图\n")
cat("    10_feature_plot.png    - Feature图\n")
cat("    11_violin_markers.png  - Marker小提琴图\n")
cat("    12_umap_labeled.png    - 注释后UMAP图\n")
cat("    all_markers.csv        - 全部Marker表\n")
cat("    pbmc_tutorial.rds      - 中间结果\n")
cat("    pbmc3k_final.rds       - 最终结果\n")
cat("=======================================================\n")

8. 下一步学习

阶段 教程 技能目标
阶段2 Visualization Vignette 掌握专业级图表制作
阶段2 SCTransform 替代传统归一化的先进方法
阶段3 Integration / Mapping 跨批次整合 + 自动注释
阶段4 WNN / ATAC / Mixscape 多模态与扰动分析
阶段5 Sketch / BPCells 百万级细胞分析
阶段6 Visium HD / 空间组学 空间转录组全链路

本教程基于 Seurat v5.5.1 官方文档整理,数据来自 10X Genomics 公开数据集。
R 4.6.1 + Seurat 5.5.1 + Windows 环境