2013-03-15 40 views
1

我有,我想作爲一個自定義圖例使用的圖像 - 3個區中的一個人物一個普遍的傳奇與grid.arrange結合:結合的圖像作爲傳奇的情節GGPLOT2

Custom Legend

我我可以用png或者其他一些軟件包將它加載到R中,並使用grid.arrange將它放在我的圖形旁邊。是否有可能在已包含用於製作組合圖的功能的包中包含這些圖像,如果是這樣的話,您可以在哪裏放置它,以及如何從R代碼中調用它,然後從包中的位置調用它。我打算經常使用這種圖形。

UPDATE:

我已經在我的包結構的根目錄中創建一個名爲「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文件夾,爲什麼源包包含它但不將其安裝到我的庫 - 我該怎麼做才能糾正這個問題?

+0

http://developer.r-project.org/Raster/raster-RFC.html – mdsumner 2013-03-15 13:37:31

+0

和'inst'子文件夾呢? – agstudy 2013-03-15 13:43:19

回答

2

agstudy's answer介紹如何引用文件中已安裝的軟件包,而不必知道在哪裏包得安裝。問題的另一部分是將圖像文件放入已安裝的軟件包中。

the "Package subdirectories" second of Writing R Extensions,感興趣的部分是關於inst子目錄:

inst子目錄中的內容將被遞歸複製到安裝目錄。的inst子目錄不應與那些由R使用干擾(目前,使用RdatademoexeclibsmanhelphtmlMeta,及更早版本latexR-ex)。 inst的拷貝發生在src被構建之後,因此它的Makefile可以創建要安裝的文件。

因此,對於一個文件出現在img目錄關閉所安裝的包的根,它必須出現在inst/img目錄中的源的。所以從img移動rgblegend.pnginst/img然後

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

應該工作。

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

嗨,是的,這是我正在做的,我已經嘗試過,但我得到的錯誤說無法打開。我在我的包的根目錄下創建了一個名爲img的文件夾,將圖像文件放入並構建了一個windows二進制文件,但它似乎不起作用,因爲如果我深入到我的R庫並查看包「png」目錄I看到一個img文件夾,但在我的軟件包目錄中,我看不到這樣的文件夾。我確信我已經正確拼寫了所有內容 - 更新原始問題。 – Ward9250 2013-03-15 11:56:39

+0

@Axolotl9250你解決了你的問題嗎? – agstudy 2013-03-15 13:49:49