stackedplot 函数_R函数实现单细胞StackedVlnPlot

作者: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'

)

你可能感兴趣的:(stackedplot,函数)