前情提要
单细胞数据分析里面最基础的就是降维聚类分群,参考前面的例子:人人都能学会的单细胞聚类分群注释 ,这个大家基本上问题不大了,使用seurat标准流程即可,不过它默认出图并不好看,详见以前我们做的投票:可视化单细胞亚群的标记基因的5个方法,下面的5个基础函数相信大家都是已经烂熟于心了:
- VlnPlot(pbmc, features = c("MS4A1", "CD79A"))
- FeaturePlot(pbmc, features = c("MS4A1", "CD79A"))
- RidgePlot(pbmc, features = c("MS4A1", "CD79A"), ncol = 1)
- DotPlot(pbmc, features = unique(features)) + RotatedAxis()
- DoHeatmap(subset(pbmc, downsample = 100), features = features, size = 3)
上几期的推文给大家分享了我对于用热图可视化及美化marker基因的内容
接下来一起来了解一下Dotplot可视化Marker基因吧。
Dotplot结果图解析
在进行细胞亚群注释的时候,可以使用Dotplot可视化收集整理的基因集,来辅助我们进行细胞亚群的判断

(PS : 可以看到我们收集整理的基因的特异性都非常好,绝大部分都有单细胞亚群的排他性 ,比如9群是CPA3代表的mast细胞,它在mast亚群里面的几乎是百分百表达,但是在其他亚群都是不表达!)
如果关注单个基因的话,也可以只查看单个基因在不同亚群的表达情况,在单细胞水平看指定基因的表达量差异情况分享的文章中就有对某个基因进行可视化展示
DotPlot(sce.all.int, features = c("MTIF2"), group.by = "celltype")

(PS ; 因为MTIF2这个基因并不是已知的各个单细胞亚群特征基因,所以可以看到它很难有排他性,而且它即使是在肝细胞里面也就是30%的表达比例,只不过是肉眼看起来好像是跟前面的百分比一样的效果,所以大家务必注意图例!)
Dotplot结果图上会展示出来Average Expressed以及Percent Expressed,及基因的平均表达量(点的颜色)以及表达的百分比(点的大小)
通过将绘图结果保存为一个变量,可以看到里面的保存的用于画图的数值
p = DotPlot(sce.all.int, features = c("MTIF2"), group.by = "celltype")
View(p)

其中data数据中就包含了Average Expressed、Percent Expressed以及Average Expressed scaled

在推文务为有补于世 | 单细胞之DotPlot的表达量哪来的?整理了平均表达量Average Expressed的计算方法

1. 简单尝试计算平均表达量-Average Expressed:查看B细胞亚群里面MTIF2基因的平均表达量
取出B细胞亚群,获取B细胞亚群里面MTIF2基因原始表达矩阵,计算平均表达量
#average expressed
sce.B = sce.all.int[, sce.all.int$celltype %in% c( 'Bcell')]
gene_expression <- sce.B[["RNA"]]$counts["MTIF2", ]
# 计算平均表达量,忽略NA值
average_expression <- mean(gene_expression/sce.B$nCount_RNA*10000, na.rm = TRUE)


2. 计算基因在不同亚群里面的表达百分比Percent Expressed
统计并整理基因在不同细胞亚群的表达与否情况,然后计算表达数量占全部细胞亚群数量的百分比
#pct.express计算方式
MTIF2 = sce.all.int@assays$RNA$data["MTIF2",]>0
t(table(MTIF2,sce.all.int$celltype))
data <- data.frame(
CellType = c("Bcell", "cycle", "endothelial", "epithelial", "hepatocytes", "macrophages", "mast", "myeloids", "myofibroblasts", "Tcell"),
MTIF2_FALSE = c(3053, 1810, 3609, 1975, 6294, 5509, 186, 10335, 1131, 7414),
MTIF2_TRUE = c(355, 411, 448, 446, 3040, 1154, 7, 1370, 144, 503)
)
# 计算每个细胞亚群中总细胞数
data$TotalCells <- data$MTIF2_FALSE + data$MTIF2_TRUE
# 计算每个细胞亚群中MTIF2的表达占比,并添加到data表格中
data$PercentExpressed <- (data$MTIF2_TRUE / data$TotalCells)*100


在画图展示的labels中,x轴是我们选择展示的基因,y轴identity是细胞亚群,点的大小是由pct.exp决定的,颜色是由avg.exp.scaled决定的

关于avg.exp.scaled的计算没有去尝试,大家感兴趣的可以看一下Dotplot函数的具体计算方式

Dotplot常用参数

除了输入数据(object)、基因集(features)以及分组信息(group.by)和分割参数(split.by)这些常用参数外,还有一些和点的颜色大小以及scale范围相关的参数
点的颜色及缩放大小
cols:
绘图颜色——可以是RColorBrewer包中的调色板名称,也可以是自定义的渐变的两种颜色,或者是定义多个渐变的三种以上颜色(如果设置了split.by)。

dot.min:
绘制最小点的细胞分数(默认为0),所有表达给定基因的细胞组少于此分数的将不绘制点。dot.scale:
气泡大小的缩放比例,类似于cex参数,默认是6,可以通过这个参数调节各个气泡大小之间差异程度

scale.by:
通过'size'或'radius'两种方式缩放点的大小,默认为"radius"。scale.min:
设置缩放的下限,使用NA为默认值。scale.max:
设置缩放的上限,使用NA为默认值。
使用默认参数绘图
具体绘图及美化还是使用pbmc-3k的注释分群后的示例数据,使用FindAllMarkers
查找并获取top5的Marker基因进行可视化
#top5 marker基因获取
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25, verbose = FALSE)
top5 = pbmc.markers %>% group_by(cluster) %>% top_n(n = 5, wt = avg_log2FC)
g = unique(top5$gene)
可以先看看直接使用默认参数,不调节展示的情况
DotPlot(pbmc, features = g)

可以看到features展示列全部挤在了一起,不便于阅读。所以可以对采用参数倾斜展示基因,或者将基因和细胞亚群调换位置
1. 调节features的排列角度
DotPlot(pbmc, features = g) + RotatedAxis()

2.将features和identity调换位置
DotPlot(pbmc, features = g) + coord_flip()+ RotatedAxis()

小结
这期简单了解了一下Dotplot展示的Average Expressed以及Percent Expressed计算方式,以及Dotplot常用参数
最后简单的使用默认参数展示了top5的marker基因,使用参数倾斜展示基因,或者将基因和细胞亚群调换位置对结果图进行简单的调整
Dotplot可调节的点还有很多,下期一起来了解一下基于Dotplot函数可视化的美化(以及它的多种变形操作,比如下面的图E就可以直接使用上面的dotplot函数的数据 )