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

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


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

相关文章
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2作图展示基因和转座子的相对位置
跟着Nature学作图:R语言ggplot2作图展示基因和转座子的相对位置
|
数据挖掘
ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
1053 0
|
数据可视化 数据挖掘 Python
跟着Nature Metabolism学作图:R语言ggplot2热图和添加分组标记
跟着Nature Metabolism学作图:R语言ggplot2热图和添加分组标记
|
数据可视化 数据挖掘 Python
跟着Nature Metabolism学作图:R语言ggplot2热图组合树图和双层分组标记
跟着Nature Metabolism学作图:R语言ggplot2热图组合树图和双层分组标记
|
数据可视化 数据挖掘 Python
跟着Molecular Plant学作图:R语言circlize包画圈图展示基因组的一些特征补充添加图例
跟着Molecular Plant学作图:R语言circlize包画圈图展示基因组的一些特征补充添加图例
|
数据可视化 数据挖掘 Python
跟着Nature Biotechnology学作图:R语言ComplexHeatmap包做热图展示TCGA-BRCA数据集概况
跟着Nature Biotechnology学作图:R语言ComplexHeatmap包做热图展示TCGA-BRCA数据集概况
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2散点栅格化能够减小输出pdf的文件大小
跟着Nature学作图:R语言ggplot2散点栅格化能够减小输出pdf的文件大小
|
数据可视化 数据挖掘 Python
跟着PNAS学作图:R语言ggplot2作图展示多序列比对结果
跟着PNAS学作图:R语言ggplot2作图展示多序列比对结果
|
机器学习/深度学习 数据可视化
【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名。
【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
|
机器学习/深度学习 存储
PIE-Engine 教程:水稻面积提取2—监督分类(宿迁市)
PIE-Engine 教程:水稻面积提取2—监督分类(宿迁市)
279 0
PIE-Engine 教程:水稻面积提取2—监督分类(宿迁市)