在ggplot2和facet_wrap中,如何删除所有边距和填充但保留strip.text?

Dan*_*yen 15 visualization r ggplot2

这可能主要是因为我误解panel.margin = unit(...)theme()函数中的工作原理......但是我无法按照我喜欢的方式自定义facet_wrap中的边距.基本上,我想要一个看起来像这样的facet_grid,strip.text每个facet中都有facet text(即)插入,并且每个facet之间没有spcaing:

(我在粉红色的边框中留下来显示每个方面的尺寸)

理想的最终产品

所以这是迄今为止的代码.

要设置数据和图:

library(ggplot2)
library(grid)
p <- ggplot() +
  geom_bar(data = mtcars, aes(x = cyl, y = qsec), stat = 'identity') +
  facet_wrap( ~ carb, ncol = 3)

mytheme <- theme_minimal() + theme(
  axis.text.x = element_blank(),
  axis.text.y = element_blank(),
  axis.ticks = element_blank(),
  axis.title = element_blank(),
  panel.margin = unit(0, "lines"),
  panel.border = element_rect(colour = rgb(1.0, 0, 0, 0.5), fill=NA, size=1)
)
Run Code Online (Sandbox Code Playgroud) 标准图
 p + mytheme
Run Code Online (Sandbox Code Playgroud)

只是一个标准的情节

完全删除strip.text
p + mytheme + theme(strip.text = element_blank())
Run Code Online (Sandbox Code Playgroud)

没有条文

添加strip.text并将其插入
p + mytheme +
     theme(strip.text = element_text(size = rel(3.0), vjust = -4.0))
Run Code Online (Sandbox Code Playgroud)

测试网格插入文本

strip.text(以及增加的相对大小)的重新包含增加了两行之间的垂直边距.所以在这一点上,我不知道如何关闭顶行和底行之间的垂直间隙.

负利润太多
p + mytheme +
    theme(strip.text = element_text(size = rel(3.0), vjust = -4.0), 
          panel.margin = unit(c(-2, -2), "lines"))
Run Code Online (Sandbox Code Playgroud)

负利润太多

那么我如何只针对两行之间的panel.margin呢?

编辑:其他信息.行之间的空格似乎是strip.background:

p + mytheme +
        theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
              panel.margin = unit(-1, "lines"),
              strip.background = element_rect(fill = rgb(0, 1.0, 0, 0.2)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

maj*_*maj 11

在可能的参数列表中theme(),不仅有panel.margin("面板(单元)周围的边距",参见?theme),但方便的是,您也可以一次访问其中一个轴,分别使用panel.margin.xpanel.margin.y("水平/垂直边距")在facet面板周围(单位;继承自panel.margin)").

因此,虽然将利润率降低到零以下会感觉有点像黑客,但是下面的内容会完成这项工作(你可能需要调整一点价值 - unit(-2, "lines")对我来说效果最好):

p + theme(strip.text = element_text(size = rel(3.0), vjust = -4.0), 
          panel.margin.y = unit(-2, "lines"))
Run Code Online (Sandbox Code Playgroud)

如果你使用strip.text = element_blank(),那么你应该使用panel.margin.y = unit(-0.5, "lines").