tidyverse / ggplot2

An implementation of the Grammar of Graphics in R
https://ggplot2.tidyverse.org
Other
6.39k stars 2k forks source link

Add `strip.spacing` theme element #5958

Open teunbrand opened 1 week ago

teunbrand commented 1 week ago

This PR aims to fix #5935.

Briefly, a new theme element strip.spacing is used to set the distance from the panel to the strip unconditionally.

Previously, we could only use strip.switch.pad.{grid/wrap} to set this distance, but only if there was an axis in between the panel and the strip. In case the conditions for the strip.switch.pad.{grid/wrap} are met, then strip.spacing is additive to that spacing. The default spacing is rel(0) inheriting from the root theme(spacing) argument, so it doesn't add space by default.

However, it does add a gtable cell even when there is 0-spacing, which helps towards #5628 as the gtable shape no longer depends on the relative placement of axes and strips (the cell is added regardless).

To give a few examples. We weren't able to do this before:

devtools::load_all("~/packages/ggplot2")
#> ℹ Loading ggplot2

p <- ggplot(mpg, aes(displ, hwy)) +
  geom_point()

p + facet_wrap(year ~ drv) +
  theme(strip.spacing = unit(1, "cm"))

Or this:

p + facet_grid(year ~ drv, switch = "both") +
  theme(strip.spacing = unit(1, "cm"))

Created on 2024-06-27 with reprex v2.1.0