作者:ahworld
链接:R函数实现单细胞StackedVlnPlot
来源:微信公众号-seqyuan
著作权归作者所有,任何形式的转载都请联系作者。
上图这样的单细胞StackedVlnPlot
在高分文章中出现比较多,比较适合美观的展示多个marker gene的表达分布,而目前Seurat
画小提琴图的函数VlnPlot
是不能实现这样堆叠效果的。
我们在《seurat结果转scanpy画StackedVlnPlot》中介绍过scanpy
中的sc.pl.stacked_violin
函数可以实现StackedVlnPlot的功能:
我们在《生信工程师的自我修养》中介绍过怎样修改scanpy
的sc.pl.stacked_violin
实现小提琴图横放堆叠的效果:
Seurat
结果转loom
格式让很大一部分人望而却步,选择了放弃画StackedVlnPlot,或者宁愿用AI实现。
所以,今天分享给大家一个用R原生函数实现StackedVlnPlot的方法,需要用到patchwork
包,代码如下:
library(Seurat)
library(ggplot2)
modify_vlnplot<- function(obj,
feature,
pt.size = 0,
plot.margin = unit(c(-0.75, 0, -0.75, 0), "cm"),
...) {
p<- VlnPlot(obj, features = feature, pt.size = pt.size, ... ) +
xlab("") + ylab(feature) + ggtitle("") +
theme(legend.position = "none",
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_line(),
axis.title.y = element_text(size = rel(1), angle = 0, vjust = 0.5),
plot.margin = plot.margin )
return(p)
}
## main function
StackedVlnPlot<- function(obj, features,
pt.size = 0,
plot.margin = unit(c(-0.75, 0, -0.75, 0), "cm"),
...) {
plot_list<- purrr::map(features, function(x) modify_vlnplot(obj = obj,feature = x, ...))
plot_list[[length(plot_list)]]<- plot_list[[length(plot_list)]] +
theme(axis.text.x=element_text(), axis.ticks.x = element_line())
p<- patchwork::wrap_plots(plotlist = plot_list, ncol = 1)
return(p)
}
这个StackedVlnPlot
是对Seurat的VlnPlot方法的封装,使用方法同VlnPlot,输入数据是Seurat对象,让我们看下效果:
StackedVlnPlot(sdata, c('Retnlg', 'Pygl', 'Anxa1', 'Igf1r', 'Stfa2l1'), pt.size=0, cols=my36colors)
如果需要对图做细微的调整,在了解ggplot2的基础上,可以尝试对上面的函数进行定制修改。
配色方案也一并分享:
my36colors <-c('#E5D2DD', '#53A85F', '#F1BB72', '#F3B1A0', '#D6E7A3', '#57C3F3', '#476D87',
'#E95C59', '#E59CC4', '#AB3282', '#23452F', '#BD956A', '#8C549C', '#585658',
'#9FA3A8', '#E0D4CA', '#5F3D69', '#C5DEBA', '#58A4C3', '#E4C755', '#F7F398',
'#AA9A59', '#E63863', '#E39A35', '#C1E6F3', '#6778AE', '#91D0BE', '#B53E2B',
'#712820', '#DCC1DD', '#CCE0F5', '#CCC9E6', '#625D9E', '#68A180', '#3A6963',
'#968175'
)