更改特定 ggplot 方面的面板背景颜色

Change panel background color of specific ggplot facets

我想更改排列为 facet_grid 的 ggplot 中特定方面的背景颜色。

test <- tibble(rows = c("C", "D","C", "D"),
               cols = c("A", "B", "B", "A"),
               x = c(1, 1, 1, 1),
               y = c(1, 1, 1, 1))

ggplot(test) +
  geom_point(aes(x = x, y = y)) +
  facet_grid(vars(rows), vars(cols)) +
  theme_minimal() +
  theme(
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    panel.background = element_rect(fill = NA, color = "grey60")
  )

例如,如果可以让具体的 facet AC 具有红色面板背景色,而其他面板背景色为灰色。

我见过一些深入 grob 对象的方法,可以用带状背景做这样的事情 (https://github.com/tidyverse/ggplot2/issues/2096),但我不知道如何让这种事情起作用对于情节的不同部分。

任何帮助都会很棒!

也许您更喜欢这样的解决方案,无需 grob 操作:

ggplot(test) +
  geom_rect(
    aes(xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf), 
    data.frame(rows = 'C', cols = 'A'),
    fill = 'red', alpha = 0.5
  ) +
  geom_point(aes(x = x, y = y)) +
  facet_grid(vars(rows), vars(cols)) +
  theme_minimal() +
  theme(
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    panel.background = element_rect(fill = NA, color = "grey60")
  )

缺点是颜色绘制在网格线之上。上面使用的一些透明度通常是一个很好的解决方案。或者,您可以使用 theme(panel.ontop = TRUE) 在顶部绘制网格线,但它们也会绘制在数据顶部。