Decrease margins between plots when using cowplot

Increasing the space between plots in plot_grid was also addressed in this issue.

An extra interesting solution is the one suggested in this comment - try to add an extra empty plot between the two plots and adjust the relative columns widths:

plot4 <- plot_grid(plot1, NULL, plot2, rel_widths = c(1, 0, 1), align = "hv",
          labels = c("A", "B"), nrow = 1)
plot4

enter image description here

Can even try negative values in rel_widths, which gives better results:

plot5 <- plot_grid(plot1, NULL, plot2, rel_widths = c(1, -0.1, 1), align = "hv",
                   labels = c("A", "B"), nrow = 1)
plot5

enter image description here

So, try a combination of adjusting the plot.margin (as answered by @J.Con) and adding an extra empty plot with tweaking rel_widths.


EDIT 2019-12-11

Also check out this comment of the author of cowplot (Claus Wilke):

For those kinds of problems I would now recommend the patchwork library. It's inherently difficult with plot_grid(), due to its underlying design

So, a fast example with patchwork based on their vignette Adding Annotation and Style goes like this:

library(patchwork)

plot3 <- plot1 + plot2 +
  plot_annotation(tag_levels = 'A') & 
  theme(plot.tag = element_text(size = 8))
plot3

Created on 2019-12-11 by the reprex package (v0.3.0)


Your plot.margins were actually working against you. Set them to zero to fill up that white space.

plot1 <- ggplot(data1, aes(x=x, y = y1)) +    
  geom_bar(stat ="identity", position=position_dodge(), fill = "grey")+  
  theme(plot.margin = unit(c(0,0,0,0), "cm")) + xlab1 + ylab1
plot1

ylab2 <- ylab("") 
xlab2 <- xlab("Very nice factors") 

plot2 <- ggplot(data2, aes(x=x, y = y2)) +    
  geom_bar(stat = "identity",position=position_dodge(), fill = "grey")+   
  theme(plot.margin = unit(c(0,0,0,0), "cm")) +    xlab2 + ylab2 
plot2

plot3 <- plot_grid(plot1, plot2, labels = c("A", "B"), align = "hv",nrow = 1, ncol = 2) 

plot3

enter image description here

Tags:

R

Ggplot2

Cowplot