【问题标题】:Create border and title for each column in `facet_wrap`为 `facet_wrap` 中的每一列创建边框和标题
【发布时间】:2019-12-01 13:55:26
【问题描述】:

我想在facet_wrap 的每个构面周围放置带有标签和标题的黑色边框。 类似的东西:

样本数据:

library(tidyverse)

mtcars %>% 
  mutate(gear = factor(gear, levels = c(4, 3, 5))) %>%
  ggplot(aes(mpg, disp)) + 
  geom_point() + 
  geom_smooth(method = "lm") + 
  facet_wrap(~am + gear)

【问题讨论】:

  • 只是为了澄清-您希望边框不是围绕每个方面,而是围绕 ?
  • 感谢您提供的链接,我正在调查它们。是的,在这种情况下,我不喜欢围绕每个方面本身,而是围绕每一列。
  • 我真的不介意它是否就在列周围,因为我可以安排分面顺序以匹配我想要的任何顺序。
  • @Tjebo - 感谢您的赏金!

标签: r ggplot2 border facet-wrap


【解决方案1】:

您可以通过手动添加到 ggplot gtable 来做到这一点:

library(tidyverse)    
library(grid)
library(gtable)

p <- mtcars %>% 
  mutate(gear = factor(gear, levels = c(4, 3, 5))) %>%
  ggplot(aes(mpg, disp)) + 
  geom_point() + 
  geom_smooth(method = "lm") + 
  facet_wrap(~am + gear)

g <- ggplotGrob(p)

# add basic black rectangle round the columns
gt <- gtable_add_grob(g, 
                     gList(
                      rectGrob(gp = gpar(col = "black", lwd=3, fill=NA)), 
                      rectGrob(gp = gpar(col = "black", lwd=3, fill=NA))),
                     t=7, b=13, l=c(5, 9))
# look
# grid.newpage(); grid.draw(gt)

# add title above columns
tit1 <-  textGrob("title1", x=0, hjust=0) ; tit2 =  textGrob("title2", x=0, hjust=0) 
gt <- gtable_add_rows(gt, grobHeight(tit1) + unit(0.5, "line"), 0)
gt <- gtable_add_grob(gt, gList(tit1, tit2), t=1, l=c(5, 9))
# draw
grid.newpage(); grid.draw(gt)

【讨论】:

猜你喜欢
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-28
相关资源
最近更新 更多