我如何从rangingGrob对象取回ggplot对象

时间:2018-10-11 13:10:47

标签: r ggplot2 gridextra ggplotly

我有一个返回arrangeGrob的函数。我希望访问各个ggplot对象,使它们成为输入,以说ggplotly。我试图看一下rangingGrob对象的结构,但似乎没有办法实现这一点。我不需要绘制情节,我需要在其他地方使用它。在下面的示例中,我希望能够检索到为rangingGrob提供的列表中的每个(ggplot)p1。

library(ggplot2)
library(gridExtra)
p1 = ggplot(data = pressure, aes(x = temperature, y = pressure)) + geom_line() + theme_light()

p = arrangeGrob(grobs = list(p1, p1), ncol=2, widths=c(1,1))
str(p)
grid.draw(p)
grid.draw(p$grobs[[1]])
grid.draw(p$grobs[[2]])

str(p1)
str(p$grobs[[2]])
plot(p$grobs[[2]])

library(plotly)
ggplotly(p$grobs[[2]])

1 个答案:

答案 0 :(得分:0)

不确定为什么要这样做,但是您可以轻松地愚弄rangeGrob的简单类检查并延迟转换为grob的绘制时间,

library(ggplot2)
library(gridExtra)
library(grid)

p1 = ggplot()

pl <- lapply(list(p1, p1), function(p) {class(p) <- c('dummy','grob'); p})

drawDetails.dummy <- function(x, recording = FALSE) {
  class(x) <- c('ggplot')
  grid.draw(ggplotGrob(x))
}

g = arrangeGrob(grobs = pl, widths=c(1,2))
grid.newpage()
grid.draw(g)

pp1 <- g$grobs[[1]]
class(pp1) <- class(p1)
identical(p1,pp1)
相关问题