Аннотировать определенную область фона фасета ggplot2 изображениями указанного размера

Мой вопрос похож на этот вопрос; Я хочу аннотировать каждую грань другим изображением в нижнем левом углу.

Используя gtable_add_grob, я могу заменить грани изображениями следующим образом:

library(ggplot2)
library(gtable)
library(RCurl)
library(png)

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))
shark <- readPNG(getURLContent("http://i.imgur.com/EOc2V.png"))
tiger <- readPNG(getURLContent("http://i.imgur.com/zjIh5.png"))

facets <- grep("panel", g$layout$name)
new_grobs <- list(rasterGrob(shark, width=1, height=1),
                  rasterGrob(tiger, width=1, height=1))
g2 <- with(g$layout[facets,],
          gtable_add_grob(g, new_grobs,
                          t=t, l=l, b=b, r=r, name="pic_predator") )        
grid.draw(g2)

введите здесь описание изображения

Однако на самом деле мне нужно что-то вроде этого, но я не могу найти подходящую команду gtable для сжатия и размещения изображения на каждой грани:

введите здесь описание изображения

Я рад решению не использовать gtable, если это необходимо.


person luser    schedule 13.08.2015    source источник
comment
Вы можете контролировать их размер, изменяя ширину и высоту частей при создании new_grobs, например, new_grobs <- list(rasterGrob(shark, width=0.15, height=0.05), rasterGrob(tiger, width=0.15, height=0.05)) выглядит примерно по размеру. Тогда вам просто нужно настроить их размещение.   -  person ulfelder    schedule 13.08.2015
comment
Спасибо, это заставило меня поиграть с rasterGrob и найти решение.   -  person luser    schedule 13.08.2015


Ответы (1)


Управление аргументами width и height в rasterGrob уменьшает изображение, а установка позиций x и y (или использование hjust или vjust, я полагаю) управляет размещением изображения.

library(ggplot2)
library(gtable)
library(RCurl)
library(png)

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))
shark <- readPNG(getURLContent("http://i.imgur.com/EOc2V.png"))
tiger <- readPNG(getURLContent("http://i.imgur.com/zjIh5.png"))

facets <- grep("panel", g$layout$name)
new_grobs <- list(rasterGrob(shark, width=.2, height=.05, x = .2, y = .05),
                  rasterGrob(tiger, width=.2, height=.05, x = .2, y = .05))
g2 <- with(g$layout[facets,],
          gtable_add_grob(g, new_grobs,
                          t=t, l=l, b=b, r=r, name="pic_predator") )        
grid.draw(g2)

введите здесь описание изображения

person luser    schedule 13.08.2015