2014-05-10 50 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)