细胞类型注释是单细胞转录组中非常重要的环节,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图的话,可以参考