# Separate boxplots for multiple violin plot

I am using the following function from seurat package to generate multiple violon plots and I am interested in adding box plots to them but it doesn't work when I have plotted different data at once. Is there a way to solve it ?

For example, this works:

library(Seurat)
VlnPlot(object = pbmc_small, features.plot = 'PC1') +
geom_boxplot()


But this will simply lead into an empty box on top of my plots:

VlnPlot(object = pbmc_small, features.plot = c('PC1', 'PC2')) +
geom_boxplot()


This happens because the violin plots are combined using cowplot::plot_grid before being returned by VlnPlot. You can prevent the plots from being combined by setting combine=FALSE, then modify each one by adding a boxplot, then combine the modified plots using Seurat::CombinePlots.

However, the combine argument is currently broken in VlnPlot. I have pushed a fix but it's not on the public branch yet. VlnPlot is just a wrapper around ExIPlot (expression by identity plot) in Seurat v3 so right now this will work:

library(Seurat)
library(ggplot2)

plots <- ExIPlot(object = pbmc_small,
features = c('PC1', 'PC2'),
pt.size = 1,
combine = FALSE)

for(i in 1:length(plots)) {
plots[[i]] <- plots[[i]] + geom_boxplot() + theme(legend.position = 'none')
}
CombinePlots(plots)


Note this answer is for Seurat v3

The vioplot package comes built in with boxplots. You can download it from CRAN or there are more features (including formula input and separate colours) in the development version on GitHub: https://github.com/TomKellyGenetics/vioplot

devtools::install_github(“TomKellyGenetics/vioplot”)
library(“vioplot”)
vioplot(pbmc_small@dr@pca[,1]~pbmc_small@meta.data$ident)  To plot several PCs: library(“RColorBrewer”) colours <- brewer.pal(length(unique(pbmc_small@meta.data$$ident)), “Set3”) par(mfrow = c(1, 2)) vioplot(pbmc_small@dr@pca[,1]~pbmc_small@meta.data$$ident, main = “PC1”, xlab = “Identity”, col = colours) vioplot(pbmc_small@dr@pca[,2]~pbmc_small@meta.data$ident , main = “PC2”, xlab = “Identity”, col = colours)
par(mfrow = c(1, 1))

• You can add points to these with jitter: plot(pbmc_small@dr@pca[,1]~jitter(pbmc_small@meta.data\$ident, 0.5), add = TRUE) Dec 29 '18 at 3:59
• This version is now support on CRAN Jan 28 '19 at 1:29