使用facet_wrap时的空构面排序/放置

时间:2019-06-04 15:53:05

标签: r ggplot2

请考虑以下多面图,该图以2x2排列绘制3个小面。空面位于右下角。

library(ggplot2)
ggplot(mtcars) + 
  aes(x = wt, y = mpg) + 
  geom_point() + 
  facet_wrap(~factor(cyl), ncol = 2)

2x2 plot with 3 facets. Empty facet is in the lower-right corner.

我想改为制作一个图,该图的最上面一行为空白,例如如下所示:

2x2 plot with 3 facets. Empty facet is in the upper-right corner.

有什么方法可以做到而又不会弄乱grob或gtable?

1 个答案:

答案 0 :(得分:2)

facet_wrap有一个选项as.table。从文档中:

  

如果为TRUE(默认值),则这些构面的布局类似于表格,其右下角具有最高的值。如果为FALSE,则刻面的布局就像在右上角具有最大值的图一样。

如果您设置as.table = F,则会在右上角出现一个空格,但是面板现在处于尴尬的状态;它们会像

8 (blank)
4    6

要获得所需的订单,请进行一些预处理。

如果反转因子水平,则会得到一个布局

4 (blank)
8    6

顺序分为左下,右下,左上,右上。

根据您希望它们如何排列,您可能必须手动订购构面级别,除非在整个项目中可以将其他逻辑放在一起。我已经在这里用forcats::relevel手动完成了。

library(dplyr)
library(ggplot2)

mtcars %>%
  mutate(cyl = as.factor(cyl) %>%
           forcats::fct_relevel("6", "8", "4")) %>%
  ggplot(aes(x = wt, y = mpg)) +
  geom_point() +
  facet_wrap(vars(cyl), ncol = 2, as.table = F)

reprex package(v0.3.0)于2019-06-04创建