Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alter just horizontal spacing between facets (ggplot2)

Tags:

r

ggplot2

ggplot2 has the ability to change the margins between a faceted plot using the argument panel.margin in opts. This seems to change both horizontal and vertical spacing. Is there a way to change the spacing of either horizontal or vertical without changing the other?

An example with outcome and desired outcome:

mtcars[, c("cyl", "am", "gear")] <- lapply(mtcars[, c("cyl", "am", "gear")], as.factor)  p <- ggplot(mtcars, aes(mpg, wt, group = cyl)) +      geom_line(aes(color=cyl)) +     geom_point(aes(shape=cyl)) +      facet_grid(gear ~ am) +     theme_bw()          p + opts(panel.margin = unit(1, "lines"))  

So it currently looks like:enter image description here

How can we make it look more like:enter image description here

like image 204
Tyler Rinker Avatar asked Sep 03 '12 18:09

Tyler Rinker


2 Answers

As of July 9th, 2015, the panel.margin.x and panel.margin.y seem to have been implemented

p <- p + theme(panel.margin.x=unit(0.5, "lines") , panel.margin.y=unit(1,"lines")) 

As of December 15, 2016, 'panel.spacing' and 'panel.spacing.x' is implemented in r 3.3.2 and ggplot2 2.2.0

p <- p + theme(panel.spacing.x=unit(0.5, "lines"),panel.spacing.y=unit(1, "lines")) 
like image 105
Dave Avatar answered Sep 21 '22 06:09

Dave


A manual solution until this feature becomes available:

library(grid) height <- 0.5 # Vertical spacing aux <- 1e-5 # Auxiliary number to identify 'height' among other heights width <- 0.1 # Desirable horizontal spacing  p <- p + theme(panel.margin = unit(height + aux, "lines"))  gtable <- ggplot_gtable(ggplot_build(p)) gtable$widths[sapply(gtable$widths, '[[', 1) == height + aux][[1]][[1]] <- width grid.draw(gtable) 

enter image description here

like image 26
Julius Vainora Avatar answered Sep 19 '22 06:09

Julius Vainora