仅在facet_wrap条带文本中显示一个变量标签?

时间:2017-07-15 05:28:48

标签: r plot ggplot2 facet facet-wrap

我正使用> str_trim(str_split("John Smith","\\s")[[1]]) [1] "John" "Smith" facet_wrap()包中的ggplot2绘制多个图表。当多个变量进行构面时,结果包括条带文本中的两个标签。我怎样才能删除一个?

R数据集的这个玩具示例中,如何仅保留mpg标签?感谢

cyl

enter image description here

1 个答案:

答案 0 :(得分:3)

最令人担忧的是,@ aelwan提到几个地块将有相同的条形标签,但不一样。忽略此问题,我认为最好的方法是在cyldrv之间创建一个新的交叉变量。

因此,如果您只想为条带标签添加一行,例如:

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)