Аннотируйте определенную область фонов фасетов 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
, если это необходимо.
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)