【问题标题】:Adding a grob to patchwork plot R在拼凑图 R 中添加一个 grob
【发布时间】:2020-05-07 13:26:08
【问题描述】:

我有一个返回拼凑图的函数,但我无法对其进行任何更改。我想在上面添加一个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))

【问题讨论】:

    标签: r ggplot2 gridextra patchwork


    【解决方案1】:

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

    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))
    

    【讨论】:

    • 嗨,当我将它们转换为 ggplot 对象时,我有多个 png 文件,我正在失去质量。有没有办法直接在 png 上使用补丁而不损失质量?我使用了magickr montage 功能。它保持了良好的质量,但拼凑作品给了我更多的自定义注释能力。如果有办法请告诉我
    【解决方案2】:

    我想你想要:

    grid.arrange(grob_top,
                 p,
                 nrow = 2,
                 heights = c(0.1, 0.9))
    

    【讨论】:

    • 如前所述,我有一个返回拼凑而成的函数。在我的示例中,这将是对象 p,因此我无法使用您建议的解决方案。
    • 您仍然可以将p 称为拼凑对象,请参阅我的编辑。
    • 在这种情况下似乎有效。但是例如 grid.arrange(grob_top, p, p, heights = c(0.1, 0.45, 0.45), nrow = 3) 不起作用。是否可以以某种方式将拼凑而成的图像保存为一张图片?
    • 当然你可以使用grDevices::png()和recordPlot()来保存拼凑的对象
    • 感谢提供这些功能。我提供了一个适合我的问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2022-09-23
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多