Как заполучить базовую графику plot.new для объединения с другими через ArrangeGrob?

У меня есть следующий упрощенный вариант использования. По сути, у меня есть несколько графиков ggplot2, которые я хотел бы объединить с другим, созданным с использованием базовой графической библиотеки plot.new() и т. д.:

p1 <- generate_ggplot1(...)
p2 <- generate_ggplot2(...)
p3 <- generate_ggplot3(...)

# how to get hold of the plot output and make it available as 
# p4 for arrangeGrob?
plot.new()
...

final <- gridExtra::arrangeGrob(p1, p2, p3, p4, layout_matrix = rbind(c(1,2), c(3,4)), widths=c(7,7), heights=c(7,7))
ggplot2::ggsave(filename=output.file,plot=final,width=14,height=14)

Какие есть варианты сделать это? отдельно от перезаписи p4, чтобы он был родным ggplot2


person SkyWalker    schedule 26.08.2017    source источник
comment
Я не знаю, возможно ли это с gridextra, но проверьте gridbase; Объединить базовую графику и графику ggplot в окне рисунка R, графики, сгенерированные 'plot' и 'ggplot' бок о бок   -  person Henrik    schedule 26.08.2017


Ответы (1)


попробуйте это,

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

grab_grob <- function(...){
  grid.echo(...)
  grid.grab()
}

b <- grab_grob(function() plot(cars))
g <- ggplot()

grid.arrange(b, g)
person baptiste    schedule 26.08.2017
comment
Большое спасибо за ваш ответ! Я понимаю gridExtra::arrangeGrob, нельзя ли по-прежнему использовать этот API, а не grid напрямую? в противном случае и для полноты, как я могу достичь своего полного варианта использования OP с учетом макета, а также окончательного вывода на ggsave? - person SkyWalker; 27.08.2017
comment
Я действительно не знаю, что вы имеете в виду. Вы можете использовать arrangeGrob вместо grid.arrange для хранения составного гроба. - person baptiste; 27.08.2017
comment
Я именно это и имел в виду ???? - person SkyWalker; 27.08.2017
comment
Ваше решение работает, но, как указано в другом ответе, на который вы ссылались, окончательный результат для меня тоже заключается в том, что захваченный сюжет сжат слишком агрессивными полями, каким-то образом его размер искажается при захвате и / или организации макета. - person SkyWalker; 28.08.2017
comment
Идея, есть ли способ по-разному раскрасить фон графического изображения, чтобы увидеть, какие поля съедают все пространство, а затем заняться этим? - person SkyWalker; 28.08.2017