我有一个返回arrangeGrob
的函数。我希望访问各个 ggplot 对象以使它们成为 ggplotly 的输入。我尝试查看 arrangeGrob 对象的结构,但似乎没有办法做到这一点。我不需要绘制情节,我需要在其他地方使用它。在下面的示例中,我希望能够取回分配给 arrangeGrob 的列表中的每个 (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]])
不确定为什么要这样做,但您可以轻松地愚弄安排 Grob 的简单类检查并延迟转换为 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)