在多图绘制中设置图形之间的空间

11

在之前的R文章指定ggplot2面板宽度之后,我已经能够制作出这个图:

enter image description here

使用此代码。

您可以在http://ubuntuone.com/0Nlb97mOeDhSbFrbFKCeEG找到dput(datos)的输出。

现在我的问题是如何删除/减少图形之间的空白。我已经找到了使用ggExtra包、ggplot和facet、带有选项的multiplots,如plot.margin或panel.margin的示例,但找不到如何应用于我的情况。

感谢您的帮助。

编辑:我刚刚注意到图形的宽度不同。需要它们具有相同的宽度,以便它们可以共享来自底部图的x轴标签。

2个回答

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轴的格式或使用我的分面建议。


嗨,Richie,我尝试了你的建议,但是没有注意到图形中有显着的变化。 - pacomet
@pacomet:差别很微妙。打开绘图历史(在RGui绘图窗口中选择History -> Recording),然后使用Page Up/Down进行比较。或者使用facetting,这将给你最小的间隔空间。 - Richie Cotton
作为一个新手,也许我过于复杂化了。我为另一个目的创建了分离的图表,然后决定尝试合并。我之前尝试过像你在之前的帖子中建议的那样使用facetting,并且有另一个问题。在这里,ggplot对所有5个图表都使用geom_line,但我想要底部的一个使用geom_bar()。在这种情况下是否可能?再次感谢。 - pacomet
@pacomet:在不同的面上使用不同的几何图形是一个足够大的问题,值得单独提出一个问题。 - Richie Cotton
@pacomet:请参见https://dev59.com/zWsz5IYBdhLWcg3wbHPG#7904058。 - Richie Cotton

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

对于基础图形,是的。但是这对于基于网格的绘图,例如ggplot2中创建的绘图无效。 - Richie Cotton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接