摘要LLM 归库摘要
- 核心内容: 让 UMAP 更受审稿人喜欢的美化全流程:
stat_unchull()给细胞群加半透明虚线轮廓 +annotate()画左下角短箭头坐标轴 + 干净主题。与 Seurat 默认 UMAP 的关键区别是强调"每一类细胞整体占据什么区域、群间是否混杂、是否连续过渡"。- 适用场景: 单细胞 UMAP/t-SNE 降维图的发表级美化,突出细胞群分布范围、重叠关系与空间边界。
- 输入: 已完成的 Seurat 对象(含 UMAP 降维 + 细胞注释 celltype.3),或自有 UMAP 坐标。
- 输出: 带群体轮廓 + 短坐标轴的 UMAP 图(ggplot 对象 plot4),颜色柔和、背景干净。
- 关键参数/步骤:
stat_unchull(alpha=0.22, size=0.35, delta=0.45, linetype="dashed");短轴annotate("segment")+arrow;配色mycols;主题去网格/刻度/坐标轴;guides(override.aes)优化图例。- 常见错误:
ggunchull未安装;levels与 Seurat 注释不一致致 factor NA;mycols未覆盖全部细胞类型。- 与口腔生信连接: 牙周炎/OSCC 单细胞 UMAP 分群图可直接套用,替换 Seurat 对象与 celltype 注释、按细胞类型改配色即可。
- 下一步处理: 暂未试用;需自己的 Seurat 单细胞对象试跑。
- 归库说明: 分类到 03 生信教程与工具库(可视化与配色),置信度 0.9,理由:UMAP 美化教程、含完整可复用 R 代码;代码已同步至远程
hz-bioinfo-codes/02_可视化/04_umap/4.2_单细胞UMAP美化/。
让审稿人一眼喜欢的 UMAP 图:单细胞美化全流程
来源公众号:华哥生信 Bioinformation(2026-08-21)| 配套 R 代码已同步至代码库
02_可视化/04_umap/4.2_单细胞UMAP美化/
这类 UMAP 的特点#
与常规 Seurat 默认 UMAP 最大的区别:在细胞群外加半透明的群体轮廓/包络区域,让读者一眼看出不同细胞群的分布范围、重叠关系和空间边界。这种美化版 UMAP 更强调"每一类细胞整体占据什么区域、不同群之间是否混杂、哪些亚群可能连续过渡"。颜色柔和、背景干净、坐标轴简洁,通过虚线边界 + 透明色块增强层次感。
复现流程#
1. 加载包#
library(Seurat)
library(ggplot2)
library(grid)
library(ggunchull) # 绘制每个细胞群的边界轮廓
2. 读取 Seurat 对象并提取坐标#
# 读取已质控/降维/注释的单细胞对象
load("scRNA.rdata")
plotData <- as.data.frame(scRNA.sub<a href="%22umap%22">"umap"</a>@cell.embeddings)
colnames(plotData)[1:2] <- c("umap_1", "umap_2")
scRNA.sub$celltype <- scRNA.sub$celltype.3
plotData$cluster <- factor(scRNA.sub$celltype,
levels = c("Tcells", "Myeloid", "Cancer", "Endothelial_cell",
"Fibroblasts", "Neutrophils", "Bcells"))
3. 自定义配色#
mycols <- c(
"Tcells" = "#D95F5F", "Myeloid" = "#C9A227", "Cancer" = "#5DAE5D",
"Endothelial_cell" = "#4DB6AC", "Fibroblasts" = "#4C78A8",
"Neutrophils" = "#8E77B8", "Bcells" = "#D77FB3"
)
4. 计算短坐标轴位置#
x_range <- range(plotData$umap_1, na.rm = TRUE)
y_range <- range(plotData$umap_2, na.rm = TRUE)
x_min <- x_range[1] - 2; x_max <- x_range[2]
y_min <- y_range[1] - 2; y_max <- y_range[2]
x_span <- x_max - x_min; y_span <- y_max - y_min
x_axis_len <- x_span * 0.18; y_axis_len <- y_span * 0.18
x_axis_start <- x_min - x_span * 0.03; y_axis_start <- y_min - y_span * 0.03
x_lim <- c(x_min - x_span * 0.08, x_max + x_span * 0.05)
y_lim <- c(y_min - y_span * 0.08, y_max + y_span * 0.05)
5. 绘制带群体轮廓的 UMAP(核心)#
plot <- ggplot(plotData, aes(x = umap_1, y = umap_2, color = cluster, fill = cluster)) +
stat_unchull(alpha = 0.22, size = 0.35, delta = 0.45, linetype = "dashed") +
geom_point(size = 0.8, alpha = 0.85, stroke = 0) +
scale_color_manual(values = mycols, name = NULL) +
scale_fill_manual(values = mycols, name = NULL) +
coord_fixed(xlim = x_lim, ylim = y_lim, clip = "off") +
labs(x = NULL, y = NULL) +
theme_classic(base_size = 12)
6. 调整主题(CNS 风格)#
plot2 <- plot + theme(
aspect.ratio = 1,
panel.background = element_blank(), panel.grid = element_blank(),
axis.line = element_blank(), axis.ticks = element_blank(),
axis.text = element_blank(), axis.title = element_blank(),
legend.position = "right", legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.35, "cm"),
legend.background = element_blank(), legend.key = element_blank(),
plot.margin = margin(20, 20, 20, 20)
)
7. 添加左下角短箭头坐标轴#
plot3 <- plot2 +
annotate("segment",
x = x_axis_start, xend = x_axis_start + x_axis_len,
y = y_axis_start, yend = y_axis_start,
linewidth = 0.45, color = "black",
arrow = arrow(length = unit(0.12, "cm"), type = "closed")) +
annotate("segment",
x = x_axis_start, xend = x_axis_start,
y = y_axis_start, yend = y_axis_start + y_axis_len,
linewidth = 0.45, color = "black",
arrow = arrow(length = unit(0.12, "cm"), type = "closed")) +
annotate("text",
x = x_axis_start + x_axis_len * 0.55,
y = y_axis_start - y_span * 0.035,
label = "umap_1", size = 3.5, fontface = "italic") +
annotate("text",
x = x_axis_start - x_span * 0.035,
y = y_axis_start + y_axis_len * 0.55,
label = "umap_2", size = 3.5, fontface = "italic", angle = 90)
8. 优化图例并输出#
plot4 <- plot3 +
guides(
color = guide_legend(override.aes = list(size = 2.5, alpha = 1)),
fill = guide_legend(override.aes = list(alpha = 0.25))
)
常见错误#
| 问题 | 原因/解决 |
|---|---|
stat_unchull 未找到 |
装 ggunchull 包 |
| factor 出现 NA | levels 与注释不一致 |
| 配色报错 | mycols 未覆盖全部类型 |
使用说明(可复用)#
- 准备含 UMAP 降维 + 细胞注释的 Seurat 对象。
- 替换
scRNA.sub与celltype注释列、按细胞类型改mycols和levels。 - 完整 R 脚本见远程代码库
hz-bioinfo-codes/02_可视化/04_umap/4.2_单细胞UMAP美化/01_单细胞UMAP美化全流程.R。
参考链接
- 公众号原文:https://mp.weixin.qq.com/s/bgEjYq9z9gih4viiK0COLQ
- ggunchull 包(CRAN):https://CRAN.R-project.org/package=ggunchull