去掉 facet_grid 第一行的空面板

Chu*_*iao 5 r ggplot2 facet-grid

facet_grid例如,我试图用来布置面板,

library(tidyverse)
library(lubridate)
economics %>%
  filter(date >= ymd(19680101)) %>% 
  mutate(
    year = year(date),
    month = month(date),
    decade = floor(year/10) * 10,
    single = year - decade,
    decade = paste0(decade, "s")
  ) %>% 
  ggplot(aes(month, uempmed)) +
  geom_point() +
  facet_grid(decade ~ single)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我的问题是,我怎样才能乘坐前 7 个面板(和最后 4 个),让它们完全空白

dww*_*dww 4

我发现通过在gtable绘图之前编辑面板组可以最简单地做到这一点。

首先让我们将 ggplot 对象保存在myplot

myplot <- economics %>%
  filter(date >= ymd(19680101)) %>% 
  mutate(
    year = year(date),
    month = month(date),
    decade = floor(year/10) * 10,
    single = year - decade,
    decade = paste0(decade, "s")
  ) %>% 
  ggplot(aes(month, uempmed)) +
  geom_point() +
  facet_grid(decade ~ single)
Run Code Online (Sandbox Code Playgroud)

现在我们可以在绘图之前移除面板。我演示了使用cowplot::plot_to_gtable,尽管还有其他几个包提供将 ggplot 转换为 gtable 的功能。

library(cowplot)
library(grid)
gt <- plot_to_gtable(myplot)
to.delete = which (gt$layout$t == 8 & gt$layout$r <= 19 & grepl('panel', gt$layout$name))
to.delete = c(to.delete, which(gt$layout$t == 18 & gt$layout$r >= 17 & grepl('panel', gt$layout$name)))

gt$grobs[to.delete] <- NULL
gt$layout <- gt$layout[-to.delete, ]
grid.newpage()
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我们还可以向上移动空单元格的轴,如下所示:

to.move = which(gt$layout$r >= 17 & grepl('axis-b', gt$layout$name))
gt$layout$t[to.move] <- gt$layout$t[to.move] - 2
gt$layout$b[to.move] <- gt$layout$b[to.move] - 2
grid.newpage()
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述