使用facet_wrap(ggplot2)创建的每个子图添加标签

5
我对ggplot2(和R)非常陌生,请见谅。使用facet_wrap,我创建了一个多面板图。我想用字母标记它们(从左上角的面板标记为(A),下一个面板标记为(b)等),但我不确定如何做到这一点。我希望这位于图外(理想情况下在每个面板的左上角)。
我看到了grid.textggtitle,但我不确定如何实现这些来获得所需的结果。
我看到了this post,根据给定的答案,似乎可以手动标记每个图像,但我希望按顺序自动标记。
我非常感谢任何建议/指导。

2
可重现的示例在哪里? - user3710546
1个回答

5
p <- qplot(displ, hwy, data = mpg) + facet_wrap(~ cyl) + 
    theme(panel.margin=unit(1,"line"))

library(gtable)
g <- ggplotGrob(p)
strips <- g$layout[grep("strip_t", g$layout$name), ]
titles <- lapply(paste0("(", letters[seq_len(nrow(strips))], ")"), 
                 textGrob, x = 0, hjust = 0, vjust = 1)
g <- gtable_add_grob(g, grobs = titles, 
                     t = strips$t, b = strips$b - 2, 
                     l = strips$l, r = strips$r)
grid.newpage()
grid.draw(g)

enter image description here


非常感谢您的答复!“grob” 对我来说还很陌生,所以我得去学习更多有关它的知识。不过还有一个问题。我如何微调标签的位置呢?我希望将其放置在 "strips$b-1" 和 "strips$b-2" 之间。谢谢! - Joshlhj
你可能想在textGrob中使用vjust,取值范围为0到1之间。 - baptiste
谢谢。因为我的初衷是让标签和图表感觉不那么拥挤,所以我尝试扩大条带大小,看起来更好(在我看来)。但我也会尝试使用textGrob。再次感谢! - Joshlhj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接