分享

scRNA分析|Marker gene 可视化 以及 细胞亚群注释--你是如何人工注释的?

 生信补给站 2022-10-17 发布于北京

细胞类型注释是单细胞转录组中非常重要的环节,2021年 Nature protocols 中发表了一篇细胞注释的教程综述Tutorial: guidelines for annotating single-cell transcriptomic maps using automated and manual methods含有细胞注释常见的流程,以及每个步骤可用的软件以及一些资源和建议。

主要就是以下三个步骤(模块),自动注释,人工注释 以及 验证 。


人工注释需要依托于各种资源(loupe,数据库,文献等)获取各个cluster的基因的线索来完成注释,可能会存在一些主观因素。

每个人的人工注释方式可能会有区别,本文使用笔者采用较多的人工注释方式对 scRNA分析|多样本merge 和 harmony去批次 得到的数据进行注释 。

一 Marker gene 可视化

人工注释的方式有很多种 ,也许比较常见的就是 根据自己整理的 Marker gene(数据库,文献等),绘制一些常见的图形(vln plot,dot plot,feature plot,heatmap ),再结合各个cluster的差异基因 来进行注释。

根据自定义的Marker gene 绘制图形

library(Seurat) 

library(tidyverse)

#点图 可以接受list

Marker = list(Epi=c("EPCAM"),

Endo=c("PECAM1","PLVAP"),
Fibroblast=c("COL3A1","COL1A1","COL1A2"),
IM=c('PTPRC'),
B=c("CD79A","CD79B","CD19"),
T=c("CD3D","CD3E","CD8A","CD4"),
Myeloid=c("C1QA","C1QB","CD163","CD1C")
)

Marker2 = c("EPCAM",
"PECAM1","PLVAP",
"COL3A1","COL1A1","COL1A2",
'PTPRC',
"CD79A","CD79B","CD19",
"CD3D","CD3E","CD8A","CD4",
"C1QA","C1QB","CD163","CD1C"
)

#点图 可以接受list
DotPlot(sce2,features=Marker2,group.by='RNA_snn_res.0.5')

VlnPlot(sce2,features = Marker22,pt.size = 0,ncol = 5)

FeaturePlot(sce2, features = c("EPCAM","PECAM1","COL3A1",'PTPRC',
"CD79A","CD79B","CD3D","CD3E","C1QA","C1QB") )

然后根据Marker gene的表达量多少 以及在各个cluster中特异性表达的情况,完成各个cluster的注释。此处仅为示例,marker gene的选择 和注释结果可能不是很准确 。

注:实际的人工注释过程 可能很复杂,需要根据多结合一些信息进行注释。比如

(1)每个人都可以有 也会有 自己的marker gene 列表;

(2)Marker gene 可能没有表达 或者 低表达;

(3)Marker gene 可能并不是特异表达的,会在很多cluster中有表达;

(4)某个cluster可能表达很多种 celltype的 marker gene ;

(5)还需要结合cluster的差异基因确定。

二 亚群注释

根据以上的Marker gene的各种表型 以及 各个cluster的差异基因,知道了各个cluster对应的celltype ,那么怎么可视化 或者 加到metadata中呢?

2.1 向量注释 - Seurat官网

首先通过向量按顺序指定每一个clustyer的细胞类型,注意第一个celltype对应的是cluster0 。通过RenameIdents函数完成注释Seurat - Guided Clustering Tutorial · Seurat (satijalab.org)

new.cluster.ids <- c('Epi','Epi','Myeloid','Fibroblast','Epi','Epi','Fibroblast','Epi','T','Epi',
'Fibroblast','Epi','Endo','un','Epi','Epi','Fibroblast','un','Fibroblast')
names(new.cluster.ids) <- levels(sce2)
sce2 <- RenameIdents(sce2, new.cluster.ids)
#可以添加到metadata中 ,方便后续使用
sce2@meta.data$new.cluster.ids <- Idents(sce2)

DimPlot(sce2, reduction = 'umap',
label = TRUE, pt.size = 0.5) + NoLegend()

2.2 直接指定

与上面类似,但是分别指定各个cluster对应的celltype,更不容易出错,推荐!

Idents(sce2) <- "seurat_clusters"
sce2 <- RenameIdents(sce2,"0"="Epi",
"1"="Epi",
"2"="Myeloid",
"3"= "Fibroblast",
"4"= "Epi",
"5"= "Epi",
"6"= "Fibroblast",
"7"= "Epi",
"8"= "T",
"9"= "Epi" ,
"10"="Fibroblast",
"11"="Epi",
"12"="Endo",
"13"= "un",
"14"= "Epi",
"15"= "Epi",
"16"= "Fibroblast",
"17"= "un",
"18"= "Fibroblast"
)
sce2@meta.data$celltype <- Idents(sce2)

DimPlot(sce2, reduction = 'umap',
label = TRUE, pt.size = 0.5) + NoLegend()

2.3 metadata 中添加分群信息

metadata是含有很多重要信息的数据框,是后续可视化的数据来源 。使用数据框的处理方式,循环添加。注意的是cluster从0开始,需要减1。

sce2$Anno = "NA"
celltype = c('Epi','Epi','Myeloid','Fibroblast','Epi','Epi','Fibroblast','Epi','T','Epi',
'Fibroblast','Epi','Endo','un','Epi','Epi','Fibroblast','un','Fibroblast')

#for循环添加
sub_length = length(unique(sce2$seurat_clusters)) - 1
for (i in 0:sub_length){
sce2$Anno[sce2$seurat_clusters==i] = celltype[i+1]
}

# 绘制注释umap图
DimPlot(sce2, reduction = 'umap', group.by='Anno',

label = TRUE, pt.size = 0.5) + NoLegend()

DimPlot(sce2, reduction = 'umap', 

label = TRUE, pt.size = 0.5) + NoLegend()

注:当前Idents为Anno时候,加不加 group.by='Anno' 结果一致。

最后看一下metadata中的信息 ,保存数据以待后续使用。

head(sce2@meta.data)
save(sce2,file = "sce.anno.RData")

需要美化umap图的话,可以参考

跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算

跟SCI学Pseudotime 2 | 将拟时序分析结果映射到 umap 中

◆ ◆ ◆  ◆ 

精心整理(含图PLUS版)|R语言生信分析,可视化(R统计,ggplot2绘图,生信图形可视化汇总)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章