【问题标题】:Alter just horizontal spacing between facets (ggplot2)仅更改构面之间的水平间距(ggplot2)
【发布时间】:2012-09-03 18:48:12
【问题描述】:

ggplot2 能够使用opts 中的参数panel.margin 更改多面图之间的边距。这似乎改变了水平和垂直间距。有没有办法改变水平或垂直的间距而不改变另一个?

一个带有结果和期望结果的示例:

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

所以它目前看起来像:

我们怎样才能让它看起来更像:

【问题讨论】:

  • 我猜你可以使用顶部、右侧、底部和左边距的四个参数,但你不能。无赖。
  • @lselzer,我也这么认为,但我认为该选项仅适用于 plot.margin。此功能was asked about 一年前,其可用性的答案是“目前还没有”。
  • 由于 ggplot2 0.9.2 现在将 opts 替换为 theme 并且您可以移动一些独立于另一个的东西(即 panel.grid.major.y 等)我认为这可能有用:theme(panel.margin.x = unit(1, "lines"))但事实并非如此。
  • 提交了一个要求这个的问题:github.com/hadley/ggplot2/issues/678

标签: r ggplot2


【解决方案1】:

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

【讨论】:

  • “线条”是什么意思?
  • "lines" 是一个大小单位。检查?unit,它显示“lines”以及“inches”、“cm”等都是有效的单位。
【解决方案2】:

此功能可用之前的手动解决方案:

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)

【讨论】:

  • 非常好。希望我们将来能看到这一点。