2012-09-03 18 views
17

ggplot2 tiene la capacidad de cambiar los márgenes entre una trama facetada con el argumento panel.margin en opts. Esto parece cambiar el espaciado horizontal y vertical. ¿Hay alguna manera de cambiar el espaciado horizontal o vertical sin cambiar el otro?Altere el espacio horizontal entre las facetas (ggplot2)

Un ejemplo con el resultado y el resultado deseado:

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

Por lo tanto, actualmente se ve como: enter image description here

¿Cómo podemos hacer que se vea más como: enter image description here

+0

me hubiera imaginado que podría utilizar los cuatro argumentos para arriba, derecha, abajo y margen izquierdo, pero no se puede. Gorrón. –

+1

@lselzer, yo también lo pensé, pero creo que esa opción es solo para 'plot.margin'. Esta función [se preguntó acerca de] (https://groups.google.com/d/topic/ggplot2/tMQsVb5P69s/discussion) hace un año, y la respuesta a su disponibilidad es "no en este momento". – A5C1D2H2I1M1N2O1R2T1

+0

Dado que ggplot2 0.9.2 ahora reemplaza 'opts' con' theme' y usted puede mover algunas cosas independientemente de otra (es decir, 'panel.grid.major.y', etc.) pensé que esto podría funcionar para usar:' theme (panel .margin.x = unit (1, "lines")) 'pero no es así. –

Respuesta

18

partir del 9 de julio de 2015, la panel.margin.x y panel.margin.y parecen haber sido implementado

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

Al 15 de diciembre, 2016, 'panel.spacing' y 'panel.spacing.x 'se implementa en r 3.3.2 y ggplot2 2.2.0

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

Hermoso. Solo lo usé. –

8

Una solución manual hasta esta función 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

+0

Muy agradable. Esperamos ver esto disponible en el futuro. –

Cuestiones relacionadas