Appearance
从一团细胞到一张轨迹网:Monocle3 让分化路径自己“长”出来——云服务器预装,登录即跑
看别人的单细胞文章,拟时序轨迹图不再是一条简单的折线,而是一张能分叉、能汇合的“路网”,细胞在哪个路口转向、哪群细胞共享同一段分化路径,一目了然;轮到自己用 Monocle2,轨迹一旦分叉就画不清楚,大数据集还跑不动。
这篇换用 Monocle3,UMAP 降维 + 图学习轨迹,代码、数据、环境放在一个文件夹,全部预置在服务器公共路径,使用绝对路径激活,登录直接跑。
一、Monocle3 的“四件套”可视化
Monocle3 是 Monocle2 的全面升级,核心变化就一句话:
轨迹不再是人工指定的直线,而是让数据自己“长”出一张路网。
围绕这张图,四张核心可视化基本覆盖发文所需的拟时序展示:
| 图 | 函数 | 看什么 |
|---|---|---|
| 细胞类型 UMAP | plot_cells | 细胞在 UMAP 空间中的分布,按类型着色 |
| 伪时间梯度图 | plot_cells | UMAP 上从蓝到红的连续伪时间梯度 |
| 基因动态趋势图 | plot_genes_in_pseudotime | 轨迹相关基因沿伪时间的表达变化 |
| 基因表达 UMAP | plot_cells(genes = ...) | 关键基因在 UMAP 上的表达强度分布 |
共同特点:UMAP 做底图,轨迹是“长”出来的而不是画出来的,分叉、汇合、循环都能自然呈现。
二、用大白话讲一遍原理
把单细胞数据想象成一座城市的出租车 GPS 轨迹。Monocle3 的工作分四步:
- 铺地图(UMAP 降维):把城市里所有出租车的实时位置压成一张二维地图,相似的出租车(细胞)聚在一块。
- 画路网(
learn_graph):看出租车们是怎么移动的——哪些车经常走同一条路、在哪个路口分流、在哪片区域打转,自动“长”出一张路网。 - 定起点(
order_cells):指定一个“市中心”(根节点),计算每辆车距市中心的距离,这就是伪时间。 - 找规律(
graph_test):哪些基因的表达量随着车在路网上的移动而规律变化?这些基因就是分化过程的“路标”。
你不需要指定“这条线怎么画”,只需要告诉它“市中心在哪”,剩下的路网自己长出来。这就是 Monocle3 比 Monocle2 最省心的地方。
三、环境:登录即用
Monocle3 已预装在公共 renv 环境中,代码、数据、环境放在一个文件夹,环境绝对路径为:
text
/media/share/share_code/monocle3/环境内置 R 4.4.1,renv 管理全部依赖。RStudio 自带 R 与该环境大版本一致即可直接使用:4.4.x 通用 4.4,4.5.x 通用 4.5;可先在 RStudio Console 输入 R.version.string 查看版本。
情况一:版本匹配
直接在 Console 使用绝对路径激活并加载:
r
renv::activate(project = "/media/share/share_code/monocle3/")
library(monocle3)
library(Seurat)情况二:版本不匹配
建议在 RStudio Terminal 中使用系统 R 4.4.1 启动,或在 Console 中先切换至匹配版本的 RStudio 后再执行上述代码。
工作目录请设到自己目录,不在公共路径下读写。
四、实战:从 Seurat 到四张轨迹图
示例数据是一份 Seurat 对象,包含多种细胞类型。我们先筛选出目标细胞类型(以 Fibroblasts 为例),再构建 Monocle3 对象、学习轨迹、出图。完整流程一条代码到底。
4.1 数据导入与 Monocle3 对象构建
先设工作目录,使用绝对路径激活公共环境,读取示例数据并构建 Monocle3 对象:
r
# 工作目录设到自己目录
dir.create("~/monocle3_demo", showWarnings = FALSE)
setwd("~/monocle3_demo")
# 使用绝对路径激活公共 renv 环境
renv::activate(project = "/media/share/share_code/monocle3/")
library(monocle3)
library(Seurat)
library(dplyr)
library(ggplot2)
# 读取示例数据(Seurat 对象)
scRNA <- readRDS(
"/media/share/share_code/monocle3/data/scRNA_core_four_types.rds"
)
# 筛选目标细胞类型(以 Fibroblasts 为例)
target_celltype <- "Fibroblasts"
scRNA_sub <- subset(scRNA, celltype == target_celltype)
# 构建 Monocle3 CellDataSet
expr_matrix <- GetAssayData(scRNA_sub, assay = "RNA", layer = "counts")
cds <- new_cell_data_set(
expr_matrix,
cell_metadata = scRNA_sub@meta.data,
gene_metadata = data.frame(
gene_short_name = rownames(expr_matrix),
row.names = rownames(expr_matrix)
)
)4.2 预处理与轨迹学习
预处理、降维、聚类、学习轨迹,一步接一步:
r
# 预处理(PCA)
cds <- preprocess_cds(cds, num_dim = 100)
# UMAP 降维
cds <- reduce_dimension(cds, reduction_method = "UMAP")
# 聚类
cds <- cluster_cells(cds)
# 学习轨迹图(自动“长”出路网)
cds <- learn_graph(cds, verbose = FALSE)
# 指定根节点(先查看节点标签)
plot_cells(cds, color_cells_by = "celltype", label_principal_points = TRUE)
# 根据上图选择根节点,指定伪时间起点
cds <- order_cells(cds, root_pr_nodes = "Y_8")图 1|细胞类型 UMAP
r
plot_cells(cds, color_cells_by = "celltype", cell_size = 1.5)Fibroblasts 细胞在 UMAP 空间中铺展开,不同亚群自然聚类。轨迹图就“长”在这张底图上。
图 2|伪时间梯度图
r
plot_cells(cds, color_cells_by = "pseudotime", cell_size = 1.5)同一 UMAP 底图,这次按伪时间着色——从蓝到红的连续梯度,就是从根节点出发的“分化时间轴”。路网往哪延伸,细胞就往哪分化。
图 3|轨迹相关基因动态趋势
r
# 用 graph_test 找与轨迹显著相关的基因(Moran's I)
trace_genes <- graph_test(cds, neighbor_graph = "principal_graph", cores = 4)
track_genes_sig <- trace_genes %>%
top_n(6, morans_I) %>%
pull(gene_short_name)
# 绘制 Top 6 基因的伪时间动态
lineage_cds <- cds[rowData(cds)$gene_short_name %in% track_genes_sig, ]
plot_genes_in_pseudotime(
lineage_cds,
color_cells_by = "celltype",
min_expr = 0.5
)自动筛选出的轨迹相关基因,沿伪时间轴的表达曲线。哪些基因在分化早期启动、哪些在晚期富集,Moran's I 值越高,基因与轨迹的关联越强。
图 4|关键基因表达 UMAP
r
plot_cells(
cds,
genes = track_genes_sig,
cell_size = 1,
show_trajectory_graph = FALSE,
label_cell_groups = FALSE
)把轨迹相关基因的表达强度直接铺在 UMAP 上,基因在哪片区域高表达、哪条路径上活跃,空间分布一目了然。
五、结果文件一览
运行完成后,四张图和基因列表输出到你的个人工作目录:
celltype_umap.pdf——细胞类型 UMAP(带轨迹图)pseudotime_umap.pdf——伪时间梯度 UMAPgene_pseudotime_trends.pdf——轨迹相关基因动态趋势图gene_expression_umap.pdf——关键基因表达 UMAPtrajectory_genes.txt——Top 轨迹相关基因列表(Moran's I)
六、小结
- Monocle3 = UMAP 降维 + 图学习轨迹 + 伪时间排序,路网自己“长”出来,分叉、汇合、循环都能自然呈现。
- 四张图覆盖发文所需的拟时序可视化:细胞类型 UMAP、伪时间梯度、基因动态趋势、基因表达空间分布。
- 代码、数据、环境放在一个文件夹,使用绝对路径激活,登录即用。
- 工作目录设到自己目录,跑完结果就在你手里。
想给自己的单细胞数据也“长”出一张分化轨迹网,欢迎联系我们的技术团队开通体验。
