增加 facet_grid 文本的边距

Increasing margins of facet_grid text

我正在尝试制作一个 facet_grid 图,如下例所示。其中一个方面的名称太长,无法正确显示,因此被截断。

我尝试在文本周围添加边距以正确显示完整的构面名称。但是,element_text 中的 margin 选项只允许我添加水平边距 - 文本字段的高度似乎是固定的。有没有办法也可以添加垂直边距?

library (ggplot2)    

x <- mtcars
x$cyl <- as.factor (x$cyl)
levels (x$cyl) <- c ("a", "b", "this is a very very long name")

ggplot (x, aes (x = mpg, disp)) +
  geom_point () +
  facet_grid (cyl ~ .) +
  theme (strip.text = element_text (margin = margin (30, 5, 30, 5))) # This line should increase the margins

版本信息:R 4.0.3,ggplot2 3.3.2

一种选择是在文本中添加 space:

library(ggplot2)
#Code
levels (x$cyl) <- c ("a", "b", "this is a very\n very long name")
#Plot
ggplot (x, aes (x = mpg, disp)) +
  geom_point () +
  facet_grid (cyl ~ .) +
  theme (strip.text = element_text(size=9, lineheight=1.5)) 

输出:

这里的问题是,facet panels 都必须是相同的大小。如果你想让整个情节保持相同大小 并且 文本大小相同,你只需 运行 没有空间玩。 pint 水壶装不下一夸脱。

我认为最优雅的解决方案是将文本换行:

levels(x$cyl) <- stringr::str_wrap(levels(x$cyl), width = 20)

ggplot (x, aes (x = mpg, disp)) +
  geom_point () +
  facet_grid (cyl ~ .) +
  theme (strip.text = element_text (margin = margin (30, 5, 30, 5)))

如果这对您不起作用,其他选项是常识性选项:x 方向而不是 y 方向的小平面,或缩短标签,或缩小文本或增加绘图的分辨率。


编辑

如果您准备有不同大小的小平面,您可以将绘图构建为 ggplotGrob,然后找到您希望更改其高度的面板并将其指定为总绘图高度的比例使用“npc”单位,像这样:

p <- ggplot (x, aes (x = mpg, disp)) +
  geom_point () +
  facet_grid (cyl ~ .) +
  theme (strip.text = element_text (margin = margin (30, 5, 30, 5))) 

b <- ggplotGrob(p)
b$heights[11] <- unit(0.4, "npc")
grid::grid.newpage()
grid::grid.draw(b)