更改特定 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)
在顶部绘制网格线,但它们也会绘制在数据顶部。
我想更改排列为 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)
在顶部绘制网格线,但它们也会绘制在数据顶部。