单细胞marker基因表达密度图-(还有一个包装函数)

学术   2024-09-26 09:00   重庆  

偷偷问一下,关注了吗

内容获取


1、购买打包合集(《KS科研分享与服务》付费内容打包集合),价格感人,可以加入微信VIP群(答疑交流群,甚至有小伙伴觉得群比代码更好),可以获取建号以来所有内容,群成员专享视频教程,提前更新,其他更多福利!


2、《KS科研分享与服务》公众号有QQ群,进入门槛是20元(完全是为了防止白嫖党,请理解),请考虑清楚。群里有免费推文的注释代码和示例数据(终身拥有),没有付费内容,群成员福利是购买单个付费内容半价!


需要者详情请联系作者(非需要者勿扰,处理太费时间):


有小伙伴说想要做单细胞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))


循环出图:
###批量作图plist <- list()for (i in 1:nrow(markers_plot)) {
p = plot_density(mouse_data, features = markers_plot$gene[i], pal = 'magma', raster = F, size = 0.8) & theme_blank()& 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.6, "cm"), legend.title = element_text(color = 'black', face = "bold", size=8))
plist[[i]] <- p}


#拼图library(cowplot)plot_grid(plotlist = plist, ncol = 4)

黑夜模式:
plist1 <- list()for (i in 1:nrow(markers_plot)) {
p = plot_density(mouse_data, features = markers_plot$gene[i], pal = 'magma', raster = F, 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.8, "cm"), legend.key.height = unit(0.3, "cm"), legend.title = element_text(color = 'black', face = "bold", size=8))&    theme(plot.title = element_blank())& theme(legend.position = "top")& annotate("text", x = 0, y = Inf, label = markers_plot$gene[i], vjust = 1.5, size = 6, color='white')
plist1[[i]] <- p}

#拼图library(cowplot)plot_grid(plotlist = plist1, ncol = 4)

黑夜模式之下,虽然图变高级了,可以celltype轮廓没有了,我们可以框选,可能用AI更加的心应手,不过我们之前也介绍过代码(玩转单细胞(5):单细胞UMAP图只标记特定细胞群、圈定细胞群及坐标轴修改),只不过需要自己调整:
library(ggunchull)
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))& theme(plot.title = element_blank())& annotate("text", x = 0, y = Inf, label = "Ltf", vjust = 1.5,           size = 6, color='white')& stat_unchull(alpha=0.25, size=0.25,lty=2, color='white', nbin = 400, nsm = 5, qval = 0.8, sfac = 1.4)

很显然,上面种种,让我眼花缭乱,费劲巴拉,圈圈还不咋好,故而,我们借助Nebulosa,将上面的过程包装为一个函数,还是那句话,受累麻烦的事我们来解决,您轻松即可,先看看函数参数:需要注意的是,如果你只想框选某一类celltype,理想模式是这群celltype是单独聚类的,没有散落在其他类群,否则将会全部框选,效果不好,建议使用AI/PS添加。

很多是默认参数,我们演示一下:
#1黑夜模式,框选所有celltype轮廓single_CM_density(object = mouse_data,                  features = "Ltf",                  night = T)

#2黑夜模式,只选择需要的celltype,我这里选择PMN(7),聚类好#设置这个模式,需要设置参数identssingle_CM_density(object = mouse_data,                  features = "Ltf",                  night = T,                  idents = "celltype",                  label_celltype = "PMN(7)")

#正常模式#unchull=F,不需要框线single_CM_density(object = mouse_data,                  features = "Ltf",                  night = F)
#unchull=T,需要框线single_CM_density(object = mouse_data, features = "Ltf", night = F, unchull = T)

批量出一下黑夜模式的图:完美!这质感不就上去了嘛。
#批量出图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)

ok,下课,希望我们的内容对你有用!最后,再次致谢Nebulosa包的作者以及其他千千万万个R包的作者!

觉得我们分享有些用的,点个赞再走呗!

关注我们获取精彩内容:


关注不迷路:扫描下面二维码关注公众号!
B站视频号链接https://space.bilibili.com/471040659?spm_id_from=333.1007.0.0




关注 KS科研分享与服务,

认清正版优质内容和服务!

优质内容持续输出,物超所值!

合作联系:ks_account@163.com

新的板块-重要通知-双向选择


KS科研分享与服务
科研学习交流于分享,生信学习笔记,科研经历和生活!
 最新文章