1

我有一张我想用作自定义图例的图像 - 一个图形中的 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 文件夹,为什么源包包含它但不将其安装到我的库中 - 我该怎么做才能纠正这个问题?

4

2 回答 2

2

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

Writing R Extensions 的“Package subdirectories”第二部分,感兴趣的部分是关于inst子目录的:

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

因此,要使文件出现在img已安装软件包根目录下的目录中,它必须出现在inst/img源目录中。所以rgblegend.pngimginst/img然后

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

应该管用。

于 2013-03-15T15:20:32.297 回答
1

如果我理解问题是如何确保在包中找到图像。您可以将 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)
于 2013-03-15T11:43:32.003 回答