向拼凑图R中添加grob

向拼凑图R中添加grob,r,ggplot2,gridextra,patchwork,R,Ggplot2,Gridextra,Patchwork,我有一个返回拼凑图的函数,不能对其进行任何更改。我想在它上面添加一个rectGrob()。当我尝试这样做时,我删除了两个绘图 library(gridExtra) library(patchwork) library(ggplot2) p1 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() p2 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.

我有一个返回拼凑图的函数,不能对其进行任何更改。我想在它上面添加一个
rectGrob()
。当我尝试这样做时,我删除了两个绘图

library(gridExtra)
library(patchwork)
library(ggplot2)

p1 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point()
p2 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point()
p3 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width), col = 'blue') + geom_point()

p <- p1 + p2 + p3

grob_top <-   grobTree(rectGrob(gp=gpar(fill='#F0F0F0',col= 'black')), textGrob('P1,P2, P3'))

grid.arrange(grob_top, p, heights = c(0.1, 0.9))
库(gridExtra)
图书馆(拼凑)
图书馆(GG2)
p1我想你想要:

grid.排列(grob_top,
P
nrow=2,
高度=c(0.1,0.9))

使用
patchwork::wrap_elements()
gridExtra::grid.arrange()更有效


如前所述,我有一个返回补丁的函数。在我的示例中,这将是对象p,因此我无法使用您建议的解决方案。您仍然可以将
p
作为修补对象调用,请参见我的编辑。在这种情况下似乎可以使用。但例如grid.arrange(grob_top,p,p,heights=c(0.1,0.45,0.45),nrow=3)不起作用。是否可以以某种方式将补丁保存为一个图像?当然,您可以使用
grDevices::png()
和recordPlot()保存补丁对象,感谢您提供了这些函数。我提供了一个解决我问题的答案。嗨,我有多个png文件,当我把它们转换成ggplot对象时,我失去了质量。有没有一种方法可以直接在png上使用补丁而不降低质量?我使用了magickr蒙太奇功能。它保持了良好的质量,但补丁给了我更多的自定义注释能力。如果有办法,请告诉我
patchwork::wrap_elements(grob_top) / 
patchwork::wrap_elements(p) / 
patchwork::wrap_elements(p) + 
patchwork::plot_layout(ncol = 1, heights = c(0.1, 0.45, 0.45))