用图像注释ggplot2构面

nic*_*ten 2 r ggplot2

假设我要绘制4个人的数据图表:爱丽丝,鲍勃,查克和达娜。我正在使用ggplot2制作每人一个构面的多面图。我的磁盘上还有4张图像:Alice.png,Bob.png,Chuck.png和Dana.png。(显然,这是一个综合示例,需要扩展到4个以上的方面:)

有没有一种方法可以用对应的图像(理想情况下代替构面标签)注释每个构面(尽管我会对标签下面的图像感到满意)?也许类似于此处使用的技术:在ggplot2图例中使用图像而不是标签?我已经尝试阅读有关各种注释方法的文档,但是我的R-fu不足以应对挑战!

bap*_*ste 5

不太优雅,但是您可以在标签上添加小样,

library(ggplot2)

d <- expand.grid(x=1:2,y=1:2, f=letters[1:2])
p <- qplot(x,y,data=d) + facet_wrap(~f)

g <- ggplot_gtable(ggplot_build(p))

library(gtable)
library(RCurl)
library(png)
shark <- readPNG(getURLContent("http://i.imgur.com/EOc2V.png"))
tiger <- readPNG(getURLContent("http://i.imgur.com/zjIh5.png"))

strips <- grep("strip", g$layout$name)
new_grobs <- list(rasterGrob(shark, width=1, height=1),
                  rasterGrob(tiger, width=1, height=1))
g <- with(g$layout[strips,],
          gtable_add_grob(g, new_grobs,
                          t=t, l=l, b=b, r=r, name="strip_predator") )        
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)

编辑:您也可以直接替换小齿轮,

strips <- grep("strip", names(g$grobs))
new_grobs <- list(rectGrob(gp=gpar(fill="red", alpha=0.2)),
                  rectGrob(gp=gpar(fill="blue", alpha=0.2)))
g$grobs[strips] <- new_grobs
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)