有小伙伴说想要做单细胞marker基因表达密度图,我一想,好像之前是做过的(单细胞marker基因可视化的补充---密度图与等高线图)。但是他又说没有文献中的效果。后来我一看,是因为着色的问题。其实用Nebulosa包(GitHub - powellgenomicslab/Nebulosa: R package to visualize gene expression data based on weighted kernel density estimation)就可以完成。
首先我们读入数据,分析下marker基因,用于作图:
setwd('D:\\KS项目\\公众号文章\\单细胞marker基因密度图')
library(Seurat)
library(Nebulosa)
library(ggnetwork)
library(dplyr)
markers <- FindAllMarkers(mouse_data, logfc.threshold = 0.5, min.pct = 0.5)
markers_plot <- markers %>%
group_by(cluster) %>%
slice(1:2)
需要注意,这里我算是投机取巧了,用了一个和这个作图毫无关系的包ggnetwork,主要的目的是用他的theme_blank()主题,一次性将所有清空,当然也可以自己慢慢写,不过有现成的,为啥不用呢?单个图看看:
plot_density(mouse_data, features = c("Ltf"),
pal = 'magma', raster = T, size = 0.8) &
theme_blank()&#这个是ggnetwork里面的主题,可以去掉所有ggplot背景
theme(legend.frame = element_rect(colour = "black"),
legend.ticks = element_line(colour = "black", linewidth = 0),
legend.key.width = unit(0.3, "cm"),
legend.key.height = unit(0.8, "cm"),
legend.title = element_text(color = 'black', face = "bold", size=8))
想要黑夜效果,背景设置呈黑色即可:
plot_density(mouse_data, features = c("Ltf"),
pal = 'magma', raster = T, size = 0.8) &
theme_blank()&
theme(panel.background = element_rect(fill = "black"))&
theme(legend.frame = element_rect(colour = "black"),
legend.ticks = element_line(colour = "black", linewidth = 0),
legend.key.width = unit(0.3, "cm"),
legend.key.height = unit(0.8, "cm"),
legend.title = element_text(color = 'black', face = "bold", size=8))
我们借助Nebulosa,将上面的过程包装为一个函数,还是那句话,受累麻烦的事我们来解决,您轻松即可,先看看函数参数:需要注意的是,如果你只想框选某一类celltype,理想模式是这群celltype是单独聚类的,没有散落在其他类群,否则将会全部框选,效果不好,建议使用AI/PS添加。
很多是默认参数,我们演示一下:
#1黑夜模式,框选所有celltype轮廓
single_CM_density(object = mouse_data,
features = "Ltf",
night = T)
#2黑夜模式,只选择需要的celltype,我这里选择PMN(7),聚类好
#设置这个模式,需要设置参数idents
single_CM_density(object = mouse_data,
features = "Ltf",
night = T,
idents = "celltype",
label_celltype = "PMN(7)")
批量出一下黑夜模式的图:完美!这质感不就上去了嘛。
#批量出图
plist2 <- list()
for (i in 1:nrow(markers_plot)) {
p = single_CM_density(object = mouse_data,
features = markers_plot$gene[i],
night = T)
plist2[[i]] <- p
}
#拼图
library(cowplot)
plot_grid(plotlist = plist2, ncol = 4)