关于单细胞气泡图的做法,我们写过很多很多,但是这些图基本上都是利用Seurat提取了数据,然后在ggplot2中完成的。因为Seurat包中的DotPlot函数的底层就是ggplot2,所以这里我们决定就是用Dotplot函数,然后进行修饰,得到具有NCS质感的图片。
当然了,这篇内容对于高手来说没什么,但是对于一般学习者而言,我们解决的问题有:1、基本函数的使用技巧。2、气泡图注释拼图。首先我们读入数据做一个气泡图。横坐标当然是基因了,纵坐标我们不希望是celltype,而是既包含celltype,还包含分组信息的,于是我们这样作图:
library(Seurat)
library(ggplot2)
library(cowplot)
markers <- c("SPARCL1","GNG11","IFITM3","AQP1","IGFBP7","IFI27",
"CD3D","CD2","TRAC","CD3G","CD3E","TRBC2","PTPRC","GZMA",
"AIF1","MS4A6A","MNDA","SPI1","LYZ",
"S100A8","S100A9",
"MS4A2","HPGDS","TPSAB1","HDC")
DotPlot(human_data, features = markers, split.by = 'orig.ident')
但是收到了如下的报错:
Error in DotPlot(human_data, features = markers, split.by = "orig.ident") :
Not enough colors for the number of groups
很显然分组太多,默认颜色不够了,我们自己添加点。
library(dittoSeq)
DotPlot(human_data,
features = markers,
split.by = 'orig.ident',
cols = dittoColors())
分组没有毛病了,然而这显然也不是我们需要的图,因为每一个样本表达量一种颜色,而我们需要的表达气泡图是一种连续的渐变。
所以,我们在seurat对象metadata中新建一列,这一列将celltype和样本分组结合起来,然后将新的列设置为idents。这样这个问题就得到完美的解决了。
human_data@meta.data$newgroup <- paste0(human_data$celltype,"_",human_data$orig.ident)
Idents(human_data) <- 'newgroup'
Idents(human_data) <- factor(Idents(human_data), levels = c(paste0("Macrophage","_",unique(human_data$orig.ident)),
paste0("T cell","_",unique(human_data$orig.ident)),
paste0("mDC","_",unique(human_data$orig.ident)),
paste0("Neutrophil","_",unique(human_data$orig.ident)),
paste0("Mast","_",unique(human_data$orig.ident))))
DotPlot(human_data, features = markers, cols = c("lightgrey", "red"))
然后,我们对图的主题进行修饰,增加分组注释,添加分割线,添加背景,等等一系列的操作之后,我们就得到妥妥的NCS质感的图片。