Skip to content

单细胞画图,一个 SCP 包就够了——云服务器预装,登录即画 ​

看别人的单细胞文章,UMAP 配色高级、热图排版精致;轮到自己用 Seurat 画图,调配色、调主题、调图例,一下午没了。这篇介绍的 R 包 SCP,把“画图”这件事做到了一键出版级——一个函数一张图,默认配色就是顶刊审美。它已经预装在我们的云服务器上,登录即画。

一、SCP 的画图函数家族 ​

SCP 是一个“一键式”单细胞分析 R 包,围绕 Seurat 生态做了深度封装。它的分析功能很全(质控、整合、注释、轨迹、富集……),但今天单说它的招牌:画图。

几个核心画图函数,记住名字就够用了:

函数画什么
CellDimPlot细胞降维图(UMAP/tSNE),按类型、按基因、按任意指标着色
FeatureDimPlot基因表达分布图,支持多基因对比、自动标注
GroupHeatmap分组表达热图,自带细胞注释条、点图层、网格线

共同特点:不用调参数就好看。主题、配色、字体、图例全按出版标准预设好了,你要做的只有一件事——告诉它画什么。

二、环境:登录即用 ​

公共环境版本与 RStudio 匹配规则

SCP 已预装在公共 condaR 环境中,环境绝对路径 /media/share/share_code/SCP/SCP,内置 R 4.4.3(4.4.x),R 包库路径 /media/share/share_code/SCP/SCP/lib/R/library。RStudio 自带 R 与该环境大版本一致即可直接使用:4.4.x 通用 4.4,4.5.x 通用 4.5。RStudio 的 Console 面板左上角会直接显示当前 R 版本(如 R 4.4.1)。

RStudio Console 中显示的 R 版本

在 Console 左上角确认 R 的主次版本,再选择对应的使用方式。

情况一:RStudio 版本匹配——直接在 Console 指定库路径并加载:

r
.libPaths("/media/share/share_code/SCP/SCP/lib/R/library")
library(SCP)

情况二:RStudio 版本不匹配——不要使用 Console,改在 RStudio 的 Terminal 标签页激活公共环境,再输入大写 R 进入 R:

bash
source /media/share/share_code/SCP/SCP/bin/activate
R

激活后命令行提示符前出现 (SCP) 即成功;进入 R 后的所有代码与情况一完全相同,R 内不需要再 source。本篇只演示 SCP 的 R 端画图:工作目录请设置到自己目录,不在公共路径下读写;reticulate/Python 依赖不在本篇范围,完整流程所需环境由技术团队统一预置。

三、实战:一份数据,四张出版级图 ​

我们用一份项目处理后的人类疾病来源单细胞数据做演示,共 9228 个细胞;示例数据已放在公共路径,正文不展开项目信息。画图演示不需要重新跑分析,拿到注释后的 Seurat 对象就能画:

r
# 工作目录设到自己目录(首次使用先创建该文件夹);读取公共示例数据
dir.create("~/SCP_demo", showWarnings = FALSE)
setwd("~/SCP_demo")
obj <- readRDS("/media/share/share_code/SCP/high_low_group.rds")
print(obj)
text

An object of class Seurat
24343 features across 9228 samples within 1 assay
Active assay: RNA (24343 features, 2000 variable features)
 4 dimensional reductions calculated: pca, umap_before, harmony, umap_after

图 1|细胞分群 UMAP(harmony 后,类型+亚型双联图):

本文使用 metadata 中的 main_type 作为大类注释、score_group 作为 Fibroblast-like synoviocytes 高/低分组,因此设置 group.by = c("main_type", "score_group")

r
CellDimPlot(srt = obj, group.by = c("main_type", "score_group"),
            reduction = "umap_after", theme_use = "theme_blank")

SCP 输出的细胞分群双联 UMAP

左图展示细胞大类,右图展示 Fibroblast-like synoviocytes 的高低分组。

一行代码输出双联 UMAP:左侧按 10 个大类细胞着色,右侧聚焦 Fibroblast-like synoviocytes 的高/低分组,分组边界清晰。

图 2|标记基因表达分布(四联图):

r
# Seurat v5 建议先转换为 Assay 类
obj[["RNA"]] <- as(object = obj[["RNA"]], Class = "Assay")
FeatureDimPlot(srt = obj, features = c("CD3E", "CD19", "DCN", "EPCAM"), reduction = "umap_after", theme_use = "theme_blank")

四个标记基因的表达分布图

颜色深浅表示各标记基因在 UMAP 细胞中的表达强度。

四个细胞 marker 基因的表达强度按颜色深浅铺在 UMAP 上,基因在哪个簇表达一目了然。

图 3|标记基因表达分布画在一起:

r
FeatureDimPlot(
  srt = obj, features = c("CD3E", "CD19", "DCN", "EPCAM"),
  compare_features = TRUE, label = TRUE, label_insitu = TRUE,
  reduction = "umap_after", theme_use = "theme_blank"
)

多个标记基因在同一 UMAP 中对比

开启 `compare_features` 后,可在同一张图中比较多个基因。

只需要指定 compare_features = TRUE,即可实现多个基因同图对比,标签直接打在图上。

图 4|24 个标记基因的分组热图:

r
ht <- GroupHeatmap(
  srt = obj,
  features = c(
    "CD3E", "CD3D", "NKG7",
    "CD19", "MS4A1", "CD79A",
    "SDC1", "PRDM1", "MZB1",
    "CLEC10A", "CD1C", "FCER1A",
    "CLEC9A", "FCER1A", "C1QA",
    "EPCAM", "KRT8", "KRT18",
    "DCN", "COL1A1", "LUM",
    "PECAM1", "VWF", "CDH5"
  ),  # 细胞类型 marker 基因
  group.by = c("main_type", "score_group"),  # 这里可自定义要展示的分组
  heatmap_palette = "YlOrRd",
  cell_annotation = c("Doublet_Status", "orig.ident"),
  cell_annotation_palette = c("Dark2","Paired"),
  show_row_names = TRUE, row_names_side = "left",
  add_dot = TRUE, add_reticle = TRUE
)
print(ht$plot)

SCP 输出的分组标记基因热图

热图同时展示细胞类型、分组与样本来源等注释信息。

这是 SCP 画图功力的集大成者:行是细胞标记基因、列是细胞亚型,顶部带三层细胞注释条(双细胞分类、样本来源),格子里还叠了点图和网格线——这张图直接放进文章当 Figure 都够格,而自己用 ComplexHeatmap 拼出来至少要调半天。

四、小结 ​

  • SCP 的画图函数 = 一键出版级:默认配色排版就是顶刊审美,零调参;
  • 环境已预置:本篇画图示例在公共 R 环境中 library(SCP) 即可;完整流程依赖由公共环境统一维护,登录即画;
  • 本次演示的四张图均在公共环境下实测产出;
  • 想要的不只是画图?SCP 的升级版 SCOP 我们已经部署并写了专篇——从质控到富集全流程一个包跑完(见本号前一篇文章)。

想体验“登录就能画出出版级单细胞图”,欢迎联系我们的技术团队开通账号。