【问题标题】:Incorporating an image as legend for ggplot2 plot将图像合并为 ggplot2 绘图的图例
【发布时间】:2013-03-15 11:10:01
【问题描述】:

我有一张我想用作自定义图例的图像 - 一个图中 3 个图的通用图例与 grid.arrange 相结合:

我想我可以用 png 或类似的包将它加载到 R 中,并使用 grid.arrange 将它放在我的图表旁边。是否可以将此类图像包含在已经包含制作我的组合图表的功能的包中,如果可以,将它放在哪里以及如何从 R 代码中调用它,然后从它在包中的位置调用它。我打算经常在这个图例中使用这种图表。

更新:

我在我的包结构的根目录中创建了一个名为“img”的文件夹,并将文件放入其中。

在我的 R 代码中有一行: legend <- readPNG(system.file("img", "rgblegend.png", package="HybRIDS"), TRUE) 但是,当构建二进制文件,然后从本地 zip 文件安装它时,我会去绘图并:

Error in readPNG(system.file("img", "rgblegend.png", package = "HybRIDS"), : unable to open 如果我检查我的库,则没有文件夹“img”

编辑:

我检查了我的包的源版本 - 它包括“img”文件夹,但是从源安装也无法将文件夹放入我的目录。所以我想我现在的问题是,为什么制作二进制包不包含 img 文件夹,为什么源包包含它但没有将其安装到我的库中 - 我该怎么做才能纠正这个问题?

【问题讨论】:

标签: r ggplot2 png legend gridextra


【解决方案1】:

agstudy's answer 描述了如何引用已安装软件包中的文件,而无需知道软件包的安装位置。问题的另一部分是将图像文件放入已安装的包中。

来自the "Package subdirectories" second of Writing R Extensions,感兴趣的部分是关于inst 子目录:

inst 子目录的内容会递归复制到安装目录。 inst 的子目录不应干扰 R 使用的子目录(当前,Rdatademoexeclibsmanhelphtml 和 @978 @,以及更早的版本使用 latexR-ex)。 inst 的复制发生在 src 构建之后,因此它的 Makefile 可以创建要安装的文件。

因此,要使文件出现在已安装软件包根目录外的img 目录中,它必须出现在源代码的inst/img 目录中。所以将rgblegend.pngimg移动到inst/img,然后

legend <- readPNG(system.file("img", "rgblegend.png", package="HybRIDS"), TRUE)

应该可以。

【讨论】:

    【解决方案2】:

    如果我理解问题是如何确保在包中找到图像。您可以将 png 放在包的文件夹 img 下。并使用类似这样的方式调用它:

    img <- readPNG(system.file("img", "Zwrch.png", package=package_name))
    

    完整的解决方案如下所示:

    library(ggplot2)     
    library(grid)        ## to create the image grobe
    library(png)         ## to read the png
    library(gridExtra)   ## to arrange the plots
    bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
    img <- readPNG(system.file("img", "Zwrch.png", package=package_name))
    legend <- rasterGrob(image=img)
    grid.arrange(bp,legend)
    

    【讨论】:

    • 嗨,是的,这就是我想要做的,我已经尝试过了,但是我收到了无法打开的错误消息。我在包的根目录中创建了一个名为 img 的文件夹,将图像文件放入并构建了一个 Windows 二进制文件,但它似乎不起作用,因为如果我深入我的 R 库并查看包“png”目录我看到一个 img 文件夹,但在我的包目录中我看不到这样的文件夹。我确定我拼写正确 - 更新原始问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多