3
$\begingroup$

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()

enter image description here

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()

enter image description here

$\endgroup$
2
$\begingroup$

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)

VlnPlot

Note this answer is for Seurat v3

$\endgroup$
2
$\begingroup$

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))
$\endgroup$
  • $\begingroup$ You can add points to these with jitter: plot(pbmc_small@dr@pca[,1]~jitter(pbmc_small@meta.data$ident, 0.5), add = TRUE) $\endgroup$ – Tom Kelly Dec 29 '18 at 3:59
  • $\begingroup$ This version is now support on CRAN $\endgroup$ – Tom Kelly Jan 28 at 1:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.