R在多个图上的图之间设置空间

时间:2011-10-26 11:23:48

标签: r ggplot2 viewport

在之前的R帖Specifying ggplot2 panel width之后,我已经能够制作这个情节:

enter image description here

with this code.

您可以在http://ubuntuone.com/0Nlb97mOeDhSbFrbFKCeEG

找到dput(datos)的输出

现在我的问题是如何删除/缩小图表之间的空白区域。我找到了ggExtra包,ggplot和facet的例子,带有plot.margin或panel.margin选项的multiplots但是找不到如何应用于我的情况。

感谢您的帮助。

编辑:我刚刚注意到情节的宽度不一样。需要它们具有相同的宽度,以便它们可以从底部图中共享x轴标签。

2 个答案:

答案 0 :(得分:7)

使用xlab(NULL)代替xlab(" ")将删除每个图底部的一些空格。

使用opts(plot.margin = unit(c(0,0,0,0), "cm"))会从边缘移除一点空间。


我认为你通过创建5个单独的图并重新组合它们来使事情变得过于复杂。分面更容易。

mdatos <- melt(datos[, -1], id.vars = "dia")
(p_all <- ggplot(mdatos, aes(dia, value)) +
  geom_line(colour = "blue") +
  facet_grid(variable ~ ., scale = "free_y") +
  xlab("Day") +
  ylab(NULL) 
)

绘图面板的宽度不同,因为有些y轴标签有三位数字,有些只有两位。更改y轴的格式,或使用我的facetting建议。

答案 1 :(得分:2)

您可以使用parlayout布局和控制多个子图的边距。例如:

  par (fig=c(0,1,0,1), # Figure region in the device display region (x1,x2,y1,y2)
       omi=c(0,0,0.3,0), # global margins in inches (bottom, left, top, right)
       mai=c(0.1,0.1,0.3,0.1)) # subplot margins in inches (bottom, left, top, right)
  layout(matrix(1:4, 2, 2, byrow = TRUE))