保存由pushViewport创建的对象,以便将其中两个对象一起打印

保存由pushViewport创建的对象,以便将其中两个对象一起打印,r,ggplot2,R,Ggplot2,嗨,我创造了一个有点深奥的情节。我有一些数据,其中有8个因素被评为1-4级,我对每个因素的评级分布感兴趣。然而,也有空间信息,我想在我的情节中反映这一点 使用这种类型的代码,有一个: posi <- c(1,2,3,4,5,6,7,8) for (k in posi) { pushViewport( viewport(x=xpos[k], y=ypos[k], w=.14, h=.2) ) p <- ggplot(aes(x=1, y=proportion, fill=Rat

嗨,我创造了一个有点深奥的情节。我有一些数据,其中有8个因素被评为1-4级,我对每个因素的评级分布感兴趣。然而,也有空间信息,我想在我的情节中反映这一点

使用这种类型的代码,有一个:

posi <- c(1,2,3,4,5,6,7,8)
for (k in posi) {
  pushViewport( viewport(x=xpos[k], y=ypos[k], w=.14, h=.2) )
  p <- ggplot(aes(x=1, y=proportion, fill=Rating, group=Rating), data=subset(df,class==lev[k]))  +  
    geom_col(show.legend=F) + theme_void() + ggtitle(lev[k])
  p = p + scale_fill_grey(start = .9, end = .0)
  g <- ggplotGrob(p)
  grid.draw(g)
  popViewport()}
您将如何将这些不同的类型绘制在一起?或者以另一种更容易保存的方式显示此数据。
感谢您抽出时间阅读我的问题,我希望您能帮助我。

对不起,我之前没有完全理解这个问题,但这里有一个对我有用的解决方案。我们从生成绘图的代码部分开始,然后调用grid.grab来捕获当前显示的内容

### Plot 1
posi <- c(1,2,3,4,5,6,7,8)
for (k in posi) {
  pushViewport( viewport(x=xpos[k], y=ypos[k], w=.14, h=.2) )
  p <- ggplot(aes(x=1, y=proportion, fill=Rating, group=Rating), data=subset(df,class==lev[k]))  +  
    geom_col(show.legend=F) + theme_void() + ggtitle(lev[k])
  p = p + scale_fill_grey(start = .9, end = .0)
  g <- ggplotGrob(p)
  grid.draw(g)
  popViewport()}

g1 <- grid.grab(wrap.grobs = TRUE)

# Plot 2
grid.newpage()
posi <- c(1,2,3,4,5,6,7,8)
for (k in posi) {
  pushViewport( viewport(x=xpos[k], y=ypos[k], w=.14, h=.2) )
  p <- ggplot(aes(x=1, y=proportion2, fill=Rating, group=Rating), data=subset(df2,class==lev[k]))  +  
    geom_col(show.legend=F) + theme_void() + ggtitle(lev[k])
  p = p + scale_fill_grey(start = .9, end = .0)
  g <- ggplotGrob(p)
  grid.draw(g)
  popViewport()}

g2 <- grid.grab(wrap.grobs = TRUE)

现在,您可以在脚本的其他地方使用这两个对象。

谢谢您的评论,但问题是我无法像您那样分配此对象:g1您是对的,我回答得太匆忙,我已修改了答案。你能看看上面这些现在是否对你有效吗?这在这里有效,并且完全符合我的要求。现在我已经引起了你们的注意,你们知道一个明显的方法来添加标签和文本到这个图中,就像我最初的问题一样吗?无论如何,非常感谢您的帮助,我想无论如何我最终都能找到这一部分。我的最佳选择是再次使用具有适当宽度/高度的PushViewPortLayout=grid.layout,并使用grid.text和这两个对象来填充该布局中的正确点。
### Plot 1
posi <- c(1,2,3,4,5,6,7,8)
for (k in posi) {
  pushViewport( viewport(x=xpos[k], y=ypos[k], w=.14, h=.2) )
  p <- ggplot(aes(x=1, y=proportion, fill=Rating, group=Rating), data=subset(df,class==lev[k]))  +  
    geom_col(show.legend=F) + theme_void() + ggtitle(lev[k])
  p = p + scale_fill_grey(start = .9, end = .0)
  g <- ggplotGrob(p)
  grid.draw(g)
  popViewport()}

g1 <- grid.grab(wrap.grobs = TRUE)

# Plot 2
grid.newpage()
posi <- c(1,2,3,4,5,6,7,8)
for (k in posi) {
  pushViewport( viewport(x=xpos[k], y=ypos[k], w=.14, h=.2) )
  p <- ggplot(aes(x=1, y=proportion2, fill=Rating, group=Rating), data=subset(df2,class==lev[k]))  +  
    geom_col(show.legend=F) + theme_void() + ggtitle(lev[k])
  p = p + scale_fill_grey(start = .9, end = .0)
  g <- ggplotGrob(p)
  grid.draw(g)
  popViewport()}

g2 <- grid.grab(wrap.grobs = TRUE)
grid.newpage()
pushViewport(viewport(layout=grid.layout(1,2)))
g1$vp = viewport(layout.pos.col = 1)
grid.draw(g1)
g2$vp = viewport(layout.pos.col = 2)
grid.draw(g2)

both <- grid.grab(wrap.grobs = TRUE)

grid.newpage(); grid.draw(both)