2012-09-03 53 views
17

ggplot2可以使用参数panel.marginopts更改刻面图之间的边距。这似乎改变了水平和垂直间距。有没有办法改变水平或垂直的间距而不改变其他的?改变刻面之间的水平间距(ggplot2)

与结果和预期的结果的一个例子:

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

因此它目前看起来像:enter image description here

我们怎样才能使它看起来更像:enter image description here

+0

我早就猜到你可以使用四个参数为上,右,底部和左侧空白,但你不能。游民。 –

+1

@lselzer,我也这么认为,但我认为这个选项只适用于'plot.margin'。该功能一年前被问及(https://groups.google.com/d/topic/ggplot2/tMQsVb5P69s/discussion),其可用性的答案是“目前不是”。 – A5C1D2H2I1M1N2O1R2T1

+0

由于ggplot2 0.9.2现在用'theme'替换'opts',并且可以移动一些独立于另一个的东西(即'panel.grid.major.y'等),所以我想这可能会使用:'theme(panel .margin.x = unit(1,“lines”))'但它没有。 –

回答

18

随着2015年7月9日时,panel.margin.xpanel.margin.y似乎已经实施

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

随着2016年12月15日, 'panel.spacing' 和“panel.spacing.x 'r中3.3.2和GGPLOT2实现2.2.0

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

美丽。刚刚使用它。 –

8

手动解决方案,直到此功能变为可用:

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

非常好。希望我们在未来看到这一点。 –