我有一个返回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]])
答案 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)