【问题标题】:Annotate ggplot2 facets with images用图像注释 ggplot2 方面
【发布时间】:2012-10-31 06:00:26
【问题描述】:

假设我正在为 4 个人绘制数据:Alice、Bob、Chuck 和 Dana。我正在使用 ggplot2 制作一个多面图,每人一个面。我在磁盘上还有 4 个图像:Alice.png、Bob.png、Chuck.png 和 Dana.png。 (显然这是一个合成示例,需要扩展到超过 4 个方面:)

有没有一种方法可以用相应的图像来注释每个构面,最好是代替构面标签(尽管我对标签正下方的图像感到满意)?也许类似于这里使用的技术:Use image instead of labels in ggplot2 legend ?我已尝试阅读各种注释方法的文档,但我的 R-fu 不足以应对挑战!

【问题讨论】:

  • 您能否发布一个可重现的多面情节示例,让人们开始?

标签: r ggplot2


【解决方案1】:

不是很优雅,但您可以在条形标签顶部添加 grobs,

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)

编辑:你也可以直接替换grobs,

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)

【讨论】:

  • 啊,好吧,我明白你在做什么了......唯一的挑战是让我的 new_grobs 列表与 ggplot 决定订购我的 facets 的顺序相同,对吧?
  • 应该不会太难;另一种方法是定义您自己的自定义 element 主题函数以用作条带,这将查找与文本相对应的特定 iamge。
猜你喜欢
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2015-09-06
相关资源
最近更新 更多