IF16.6文章中单细胞数据可视化的堆叠小提琴图+气泡热图,还不快跟着小图去学习?

小图最近阅读文献时候发现有关单细胞分析是越来越多,并且许多高分文章中的单细胞图都非常的好看。小图就突发奇想想去复现这些高分文章中的图片,想到他们能发这么高分的文章,这里面图想必加了不少分,毕竟数据可视化才最能体现数据的美观性,才能够吸引读者。所以,我们有时候想不知道如何可视化数据时候,可以借鉴高分文章中的图片,用在自己的文章中。因此呢,小图就找了一篇文章,《Single cell transcriptomic analyses implicate an immunosuppressive tumor microenvironment in pancreatic cancer liver metastasis》IF16.6,这么高分的文章,小图看了看这篇文章的图,发现许多图都是我们见过的,还很好复现,这些图都是拼接而成的,组成一个非常好看的图。就比如下面这个图b

上图中的图b是不是挺好看的,但是小伙伴发现没,这个图b是我们非常熟悉的图,可能我们平时都绘制过,但是又不一样,小图这里就带小伙伴去复现这个图b,

我们想要复现这个图,肯定需要从哪里下手,首先就是了解这个图的组成,仔细观察,小图发现这是由两种图组成,一个是堆叠的小提琴图,右边是气泡热图,好了我们知道这两个组图的名字之后就是去实现他们。

我们从右边的图下手,因为这个文章是单细胞的文章,小图自己也用了自己单细胞数据,小伙伴可以套用数据格式去复现哦,

我们开始载入几个包,

library(scRNAtoolVis) # 小图加载这个包,为了使用这个包的数据,

library(Seurat) # dotplot,单细胞绘图使用

library(cowplot) # plot_grid

httest <- system.file(“extdata”, “htdata.RDS”, package = “scRNAtoolVis”)

pbmc <- readRDS(httest)

然后我们载入数据

# 添加分组

pbmc$groups <- rep(c(‘stim’,’control’),each = 1319)

# 添加细胞类型

pbmc$celltype <- Seurat::Idents(pbmc)

# 载入 markergene

data(“top3pbmc.markers”)

这个其实就是我们一般单细胞操作官方流程后,跑完第一个数据结果,小伙伴可以直接使用

后面我们可以使用这个数据去绘制图片

# check

head(top3pbmc.markers,3)

p <- DotPlot(pbmc,

features = split(top3pbmc.markers$gene, top3pbmc.markers$cluster),

cols = c(“#dddddd”, “#448444”)

) +

RotatedAxis() + # 来自Seurat

theme(

panel.border = element_rect(color = “black”),

panel.spacing = unit(1, “mm”),

axis.title = element_blank(),

axis.text.y = element_blank(),

)#设置主题,

p$data$feature.groups2 <- factor(p$data$feature.groups,

levels = c(“Platelet”,”DC”,”NK”,

“FCGR3A+ Mono”,”CD8 T”,”B”,

“Memory CD4 T”,”CD14+ Mono”,”Naive CD4 T”))#注释单细胞数据

P

这样一来文章中右边的图就大致的绘制出来了,上面小图还加了单细胞的注释结果,更加丰富,但是发现有一些小细节没有处理到位,中间还有分割的线,下面我们在继续绘制,我们对细节的修改需要用到ggplot2中的参数处理来看看如何处理

我们使用ggplot2从头绘制

library(ggh4x)#需要用到里面的函数处理数据

library(RColorBrewer)#加载这个包只是为了填充颜色

#下面把数据填充一下,

strip <- strip_themed(

background_x = elem_list_rect(fill = brewer.pal(9, “Paired”)))

#下面绘制图片,从主题颜色等,

p$data %>%

ggplot(aes(x = features.plot,

y = id)) +

geom_point(aes(size = pct.exp,

color = avg.exp.scaled)) +

facet_wrap2(~feature.groups2,

scales = “free_x”,

strip = strip,

nrow = 1) +

#主题的修正

theme_classic() +

theme(axis.text.x = element_text(angle = 90,

hjust = 0.5, #气泡间距

vjust = 0.3,

color = “black”),

axis.title = element_blank(),

strip.background = element_rect(color = “white”),

axis.text.y = element_blank()) +

scale_color_gradient(low = “#ffffff”,#底数据颜色设置

high = “#448444”,

name = “avg.exp”) -> p

#上述的绘图,许多都是默认的参数,小伙伴可以方向去使用

P#查看一下图

这样一来我们右边的图就复现的差不多,对比一下

发现都已经差不多了,只是颜色的设置,小伙伴对此可以自行去设置,还有小图自己加的单细胞分组信息在上方,小伙伴不喜欢这个单细胞分组可以删除,只需要把strip这个信息注释掉就可以,

好了我们实现了右边的图片,去复现一下左边的堆叠小提琴图吧

我们先载入使用的包

library(Seurat)

library(ggpubr)

library(ggsignif)

载入我们实例的数据

其实堆叠小提琴图,小伙伴不少见,做单细胞数据都会用得到,来看看如何绘制的

# 加载数据对象

#

pbmc <- readRDS(“pbmc_2k_1.rds”)

identity <- readRDS(“pbmc_2k_2.rds”)

features <- c(“CD79A”, “MS4A1”, “CD8A”, “CD8B”, “LYZ”,

“LGALS3”)

我们提取几个基因绘制

# 提取数据框子集

pbmc <- pbmc[,features]

# 添加细胞name和细胞群身份

pbmc$Cell <- rownames(pbmc)

pbmc$Idents <- identity

对上述数据处理一下

# melt数据变长

pbmc <- reshape2::melt(pbmc,

id.vars = c(“Cell”,”Idents”),

measure.vars = features,

variable.name = “Feat”,

value.name = “Expr”)

# 查看数据前10行

head(pbmc, 10)

下面我们就去绘制图片

#主题theme(大小,颜色),legend

p2 <- ggplot(pbmc, aes(Feat, Expr, fill = Feat)) +

geom_violin(scale = “width”, adjust = 1, trim = TRUE) +

scale_y_continuous(expand = c(0, 0),

position=”right”,

labels = function(x)#对主题水平的设置

c(rep(x = “”, times = length(x)-2), x[length(x) – 1], “”)) +

facet_grid(rows = vars(Idents), scales = “free”, switch = “y”) +

#下面是对主题的设置

theme_cowplot(font_size = 12) +

theme(legend.position = “none”,

panel.spacing = unit(0, “lines”),#图中线的设置

plot.title = element_text(hjust = 0.5),

panel.background = element_rect(fill = NA, color = “black”),#颜色填充

plot.margin = margin(6, 6, 0, 6, “pt”),#图中小提琴图的间距

strip.background = element_blank(),

strip.text = element_text(face = “bold”),

strip.text.y.left = element_text(angle = 0),

axis.title.x = element_blank(),

axis.ticks.x = element_blank(),

axis.text.x = element_blank()) +

ggtitle(“”) +#添加主题名字,可以不写

ylab(“Expression Level”)#Y轴的名称

#coord_flip()#可以修改横纵坐标

p2

这个图是不是和文章中差不多了

一些细节还没处理到位,小伙伴要是需要将小提琴反转可以使用coord_flip()

我们下面对数据颜色的设置一下

spring <- c(“#f6bcfd”,”#8dd3c6″,”#ffc512″,”#ffa300″,”#ff7d00″,”#ff6581″,”#f8d90d”,”#a5da6b”,”#e578d6″,”#ffd2d8″,”#90e4cd”,”#84dce0″,”#fe65b3″)

对颜色赋值

library(scales)

show_col(spring,ncol=5)#查看一下有那些颜色

p1 <- ggplot(pbmc, aes(Feat, Expr, color = Feat, fill = Feat)) +

geom_violin(scale = “width”, adjust = 1, trim = TRUE) +

scale_y_continuous(expand = c(0, 0),

position=”right”,

labels = function(x)

c(rep(x = “”, times = length(x)-2), x[length(x) – 1], “”)) +

facet_grid(rows = vars(Idents), scales = “free”, switch = “y”) +

theme_cowplot(font_size = 12) +

theme(legend.position = “none”,

panel.spacing = unit(0, “lines”),

plot.title = element_text(hjust = 0.5),

panel.background = element_rect(fill = NA, color = “black”),

plot.margin = margin(6, 6, 0, 6, “pt”),

strip.background = element_blank(),

strip.text = element_text(face = “bold”),

strip.text.y.left = element_text(angle = 0),

axis.title.x = element_blank(),

axis.ticks.x = element_blank(),

axis.text.x = element_blank()) +

ggtitle(“”) +

ylab(“Expression Level”) +

scale_fill_manual(values = spring) +

scale_color_manual(values = spring)

和上述代码一样,小伙伴多多理解一下

p1

颜色可能没做到一样,但是也挺好看,那么这两个图我们都绘制完成了,我们就去组合一下这两个图,来看看最终的步骤

plot_grid(p1,p, align =”h”, axis=”bt”, rel_widths = c(2,7))

rel_widths这个可以设置两个组组合的比例

好了,我们的组合图就绘制完成了

对于上述的数据,小伙伴可以使用自己的数据去设置一下,要多多理解代码的意思,其实许多高分文章中的图片都是一步一步组合而来的,理解代码的意思,把自己的图绘制高级起来,小伙伴快去动手试试吧!