作者:ahworld
链接:R函数实现单细胞StackedVlnPlot
来源:微信公众号-seqyuan
著作权归作者所有,任何形式的转载都请联系作者。
image
上图这样的单细胞StackedVlnPlot在高分文章中出现比较多,比较适合美观的展示多个marker gene的表达分布,而目前Seurat画小提琴图的函数VlnPlot是不能实现这样堆叠效果的。
我们在《seurat结果转scanpy画StackedVlnPlot》中介绍过scanpy中的sc.pl.stacked_violin函数可以实现StackedVlnPlot的功能:
image
我们在《生信工程师的自我修养》中介绍过怎样修改scanpy的sc.pl.stacked_violin实现小提琴图横放堆叠的效果:
image
Seurat结果转loom格式让很大一部分人望而却步,选择了放弃画StackedVlnPlot,或者宁愿用AI实现。
所以,今天分享给大家一个用R原生函数实现StackedVlnPlot的方法,需要用到patchwork包,代码如下:
library(Seurat)
library(ggplot2)
modify_vlnplot
feature,
pt.size = 0,
plot.margin = unit(c(-0.75, 0, -0.75, 0), "cm"),
...) {
p
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
pt.size = 0,
plot.margin = unit(c(-0.75, 0, -0.75, 0), "cm"),
...) {
plot_list
plot_list[[length(plot_list)]]
theme(axis.text.x=element_text(), axis.ticks.x = element_line())
p
return(p)
}
这个StackedVlnPlot是对Seurat的VlnPlot方法的封装,使用方法同VlnPlot,输入数据是Seurat对象,让我们看下效果:
StackedVlnPlot(sdata, c('Retnlg', 'Pygl', 'Anxa1', 'Igf1r', 'Stfa2l1'), pt.size=0, cols=my36colors)
image
如果需要对图做细微的调整,在了解ggplot2的基础上,可以尝试对上面的函数进行定制修改。
配色方案也一并分享:
my36colors
'#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'
)