将图像合并为ggplot2图的图例

时间:2013-03-15 11:10:02

标签: r ggplot2 png legend gridextra

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

Custom Legend

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

更新:

我在Package结构的根目录中创建了一个名为'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文件夹,为什么源包包含它但不安装到我的库 - 我该怎么做才能纠正这个?

2 个答案:

答案 0 :(得分:2)

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

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

  

inst子目录的内容将以递归方式复制到安装目录中。 inst的子目录不应干扰R使用的子目录(目前Rdatademoexeclibs,{{ 1}},manhelphtml,早期版本使用Metalatex)。 R-ex的复制发生在inst之后,因此src可以创建要安装的文件。

因此,要使文件显示在已安装软件包根目录下的Makefile目录中,它必须出现在源的img目录中。因此,将inst/imgrgblegend.png移至img,然后再移动

inst/img

应该有用。

答案 1 :(得分: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)