2014-05-10 48 views
3

小面我使用ggplot2以產生一個功能(即,刻面的數量不同而不同)面的圖。對於我製作的每個圖,我想在末尾的一個自由方面插入一個圖像(例如,導入jpg)(即,ggplot2必須以預測存在額外方面的方式來計算facet_wrap設計,但是這個方面之後將會填充一個非ggplot2圖像)。這裏是一個多面積的MWE,在這種情況下,我想插入圖片作爲第四方面:提前插入圖像作爲GGPLOT2

p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point() + facet_wrap(~cyl, ncol = 2) 

感謝所有的建議!

+0

downvote的任何原因? – AnjaM

回答

4
library(ggplot2) 
library(png) 

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

p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + 
    facet_wrap(~cyl, ncol = 2) 

g <- ggplotGrob(p) 
library(gtable) 
g <- gtable_add_grob(g, rasterGrob(img), nrow(g)-4, ncol(g)-2) 
grid.newpage() 
grid.draw(g) 
+0

謝謝,但我發現這不是很靈活,因爲您必須指定列的數量,並且您認爲facet的數量不是偶數。我正在尋找一種解決方案,其中'facet_wrap'仍然會像往常一樣計算facet的數量和位置,但它會比可變級別多一個方面,然後這個最後一個空方面將被填充圖像。 – AnjaM

0

baptiste的解決方案給我帶來了一個錯誤;我不得不將一些網格函數引導到{grid}包,下面的代碼應該克服這個問題。雖然我沒有看到R徽標出現。

library(ggplot2) 
library(png) 

img <- readPNG(system.file("img", "Rlogo.png", package="png")) 
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + 
    facet_wrap(~cyl, ncol = 2) 
g <- ggplotGrob(p) 
library(gtable) 
g <- gtable_add_grob(g, grid::rasterGrob(img), nrow(g)-4, ncol(g)-2) 
grid::grid.newpage() 
grid::grid.draw(g)