Аннотировать ggplot2 фасеты с изображениями
Скажем, я собираю данные для 4 человек: Алиса, Боб, Чак и Дана. Я использую ggplot2 для создания граненого сюжета с одним фасетом на человека. У меня также есть 4 изображения на диске: Alice.png, Bob.png, Chuck.png и Dana.png. (очевидно, это синтетический пример, который нужно масштабировать до более чем 4 аспектов:)
Есть ли способ, которым я могу аннотировать каждый фасет с соответствующим изображением, в идеале вместо метки фасета (хотя я был бы счастлив с изображением прямо под меткой)? Возможно, что-то похожее на используемую здесь технику: использовать изображение вместо меток в легенде ggplot2? Я пытался прочитать документацию по различным методам аннотирования, но мой R-fu не подходит для этой задачи!
1 ответ
Не очень элегантно, но вы можете добавить крошки поверх полосовых этикеток,
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)
Изменить: вы также можете заменить непосредственно гробов,
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)