代码之家  ›  专栏  ›  技术社区  ›  J.Con

在facet\u wrap strip text中仅显示一个变量标签?

  •  3
  • J.Con  · 技术社区  · 7 年前

    我正在使用 facet_wrap() ggplot2 R 。当通过多个变量进行切面时,结果包括条带文本中的两个标签。如何删除一个?

    在这个玩具示例中 mpg cyl 仅标签?谢谢

    ggplot(mpg, aes(displ, hwy)) +
      geom_point() +
      facet_wrap(c("cyl", "drv"))
    

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  5
  •   student    7 年前

    最令人担忧的是,正如@aelwan提到的,几个地块将具有相同的条形标签,但不相同。忽略这个问题,我认为最好的方法是在 cyl drv .

    因此,如果您只需要一行条形标签,您可以例如:

    ggplot(mpg %>% mutate(cyl_drv = paste0(cyl, '-', drv)), aes(displ, hwy)) +
      geom_point() +
      facet_wrap(~ cyl_drv)
    

    然后,如果需要,可以按以下方式更改标签:

    ggplot(mpg %>% mutate(cyl_drv = paste0(cyl, '-', drv)), aes(displ, hwy)) +
      geom_point() +
      facet_wrap(~ cyl_drv, labeller = as_labeller(c(`4-4`="4", `4-f`="4", `5-f`=5, `6-4`=6, `6-f`=6, `6-r`=6, `8-4`=8, `8-f`=8, `8-r`=8)))
    

    另一个(无可否认不是很好)改变它的方法如下(我怀疑有更好的方法):

    library(ggplot2)
    library(ggExtra)
    library(grid)
    library(gtable)
    gg <- ggplot(mpg, aes(displ, hwy)) +
      geom_point() +
      facet_wrap(~ cyl * drv)
    
    g1 <- ggplot(mpg, aes(displ, hwy)) +
      geom_point() +
      facet_wrap(~ cyl)
    
    gtab <- ggplotGrob(gg)
    
    gtab$grobs[[47]] <- ggplotGrob(g1)$grobs[[23]]
    gtab$grobs[[48]] <- ggplotGrob(g1)$grobs[[23]]
    gtab$grobs[[49]] <- ggplotGrob(g1)$grobs[[23]]
    gtab$grobs[[50]] <- ggplotGrob(g1)$grobs[[22]]
    gtab$grobs[[51]] <- ggplotGrob(g1)$grobs[[22]]
    gtab$grobs[[52]] <- ggplotGrob(g1)$grobs[[22]]
    gtab$grobs[[53]] <- ggplotGrob(g1)$grobs[[24]]
    gtab$grobs[[54]] <- ggplotGrob(g1)$grobs[[24]]
    gtab$grobs[[55]] <- ggplotGrob(g1)$grobs[[25]]
    
    grid.draw(gtab)