ggplot `facet_grid` 标签被截断。

10
在使用 facet_grid(..., space = "free_y") 时,如果组内点的数量很少,则面板标题会被截断。例如...
library(tidyverse)

d <- tibble(
  x = factor(1:40),
  y = rnorm(40),
  g = c(rep("GROUP 1", 39), "GROUP 2")
)

ggplot(d) +
  aes(x = x, y = y) +
  geom_col() +
  facet_grid(g ~ ., scales = "free_y", space = "free_y") +
  coord_flip() +
  theme(
    strip.text.y = element_text(angle = 0, size = rel(4))
  )

带有facet strip文本截断的ggplot

有没有办法使 GROUP 2 文本不会在facet网格边缘被截断?我知道可以拉伸图形,但这并不是一个令人满意的解决方案 - 毕竟,在各个facet之间有很多余白空间!是否有一种方法让标签直接延伸到那些空白的地方呢?

1个回答

8
你可以将图形转换为“grob”来关闭裁剪:
pg <- ggplotGrob(pp)

for(i in which(grepl("strip-r", pg$layout$name))){
  pg$grobs[[i]]$layout$clip <- "off"
}

grid::grid.draw(pg)

plot

上述代码可以关闭位于右侧的所有分面条形图标签的剪切,这样就可以在使用不同数据集绘制图表时进行灵活操作。

或者,如果您确切地知道要关闭哪些分面,还可以检查grob并手动指定i的值:

> pg
TableGrob (12 x 8) "layout": 18 grobs
    z         cells       name                                   grob
1   0 ( 1-12, 1- 8) background        rect[plot.background..rect.908]
2   1 ( 6- 6, 4- 4)  panel-1-1               gTree[panel-1.gTree.839]
3   1 ( 8- 8, 4- 4)  panel-1-2               gTree[panel-2.gTree.852]
4   3 ( 5- 5, 4- 4)   axis-t-1                         zeroGrob[NULL]
5   3 ( 9- 9, 4- 4)   axis-b-1    absoluteGrob[GRID.absoluteGrob.865]
6   3 ( 6- 6, 3- 3)   axis-l-1    absoluteGrob[GRID.absoluteGrob.872]
7   3 ( 8- 8, 3- 3)   axis-l-2    absoluteGrob[GRID.absoluteGrob.879]
8   3 ( 6- 6, 6- 6)   axis-r-1                         zeroGrob[NULL]
9   3 ( 8- 8, 6- 6)   axis-r-2                         zeroGrob[NULL]
10  2 ( 6- 6, 5- 5)  strip-r-1                          gtable[strip]
11  2 ( 8- 8, 5- 5)  strip-r-2                          gtable[strip]
12  4 ( 4- 4, 4- 4)     xlab-t                         zeroGrob[NULL]
13  5 (10-10, 4- 4)     xlab-b titleGrob[axis.title.x..titleGrob.858]
14  6 ( 6- 8, 2- 2)     ylab-l titleGrob[axis.title.y..titleGrob.855]
15  7 ( 6- 8, 7- 7)     ylab-r                         zeroGrob[NULL]
16  8 ( 3- 3, 4- 4)   subtitle  zeroGrob[plot.subtitle..zeroGrob.905]
17  9 ( 2- 2, 4- 4)      title     zeroGrob[plot.title..zeroGrob.904]
18 10 (11-11, 4- 4)    caption   zeroGrob[plot.caption..zeroGrob.906]

# note that in this case, we actually only need to turn off clipping for
# strip-r-2, the 11th grob.

pg$grobs[[11]]$layout$clip <- "off"

太棒了,谢谢!我第一次看到ggplotGrob - 这为绘图修改打开了一个全新的世界。 - Alexey Shiklomanov

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