1

我正在循环中创建 ggplots,然后使用 grid.arrange 将我的每个图形绘制在格子型图形的一页上。我遇到的问题是每个图形周围都有一个边框,当我绘制它们时它们合并在一起。有谁知道如何在数字之间添加空格。我一直在寻找有关图形填充的信息,并且还试图在我的地块之间添加空白 geom_rect ,但到目前为止还没有运气。下面提供了一些简化的代码。谢谢你尽你所能的帮助。

p = vector("list", 3) #List for arranging grid

for(ii in 1:3){
  p[[ii]] = ggplot(mtcars, aes(x = wt, y = mpg))+
    geom_point()+
    theme(plot.background = element_rect(colour = 'black', size = 2))
}
do.call("grid.arrange", c(p, ncol=1))
4

2 回答 2

2

我尝试了很多不同的方法来使视口在 3 x 1 布局中更小,最后意识到只需在 5 x 1 布局中添加一些高度窄的空白区域非常容易:

Layout <- grid.layout(nrow = 5, ncol = 1, 
                      heights=c(1, .1, 1, .1, 1) )
# could have written code to alternate heights or widths with gaps
grid.show.layout(Layout)
vplayout <- function(...) {  # sets up new page with Layout
     grid.newpage()
     pushViewport(viewport(layout = Layout))
 }

subplot <- function(x, y) viewport(layout.pos.row = x,
     layout.pos.col = y)

mmplot <- function(p=p) { # could make more general
     vplayout()
     print(p[[1]], vp = subplot(1, 1 ))
     print(p[[2]], vp = subplot(3, 1))
     print(p[[3]], vp = subplot(5, 1 ))
 }

mmplot(a, z)

在此处输入图像描述

于 2014-08-18T23:25:01.153 回答
2

或者,这个实验版本的 gtable提供了与 grid.arrange 类似的接口,

library(ggplot2)
library(gtable)

lp <- replicate(3, qplot(rnorm(10), rnorm(10)) + 
                     theme(plot.background=element_rect(size = 3, colour="black")),
                simplify = FALSE)

lg <- lapply(lp, ggplotGrob)
g <- do.call(gtable_arrange, c(lg, ncol=1, draw=FALSE))
g <- gtable_add_rows(g, heights = unit(1, "line"), pos = 1)
g <- gtable_add_rows(g, heights = unit(1, "line"), pos = 3)
grid.newpage()
grid.draw(g)
于 2014-08-22T22:33:12.217 回答