Modifier juste l'espacement horizontal entre les facettes (ggplot2)

ggplot2 a la capacité de modifier les marges entre l'facettes de la parcelle à l'aide de l'argument panel.marginopts. Cela semble changer l'espacement horizontal et vertical. Y a-t-il un moyen de changer l'espacement horizontal ou vertical sans changer l'autre?

un exemple avec résultat et résultat souhaité:

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

de Sorte qu'il ressemble actuellement:enter image description here

Comment pouvons-nous faire paraître plus comme:enter image description here

17
demandé sur Tyler Rinker 2012-09-03 22:48:12

2 réponses

à compter du 9 juillet 2015, le panel.margin.x et panel.margin.y semblent avoir été mises en œuvre

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

à partir du 15 décembre 2016, " panel.l'espacement " et " panneau.espacement.x' est implémenté dans r 3.3.2 et ggplot2 2.2.0

p <- p + theme(panel.spacing.x=unit(0.5, "lines"),panel.spacing.y=unit(1, "lines"))
18
répondu Dave 2016-12-15 21:29:42

Une solution manuelle jusqu'à ce que cette fonctionnalité est disponible:

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

8
répondu Julius Vainora 2013-01-27 17:33:00