ggplot2 icon indicating copy to clipboard operation
ggplot2 copied to clipboard

`facet_wrap(drop = TRUE)` can handle character variables with `NA`s

Open teunbrand opened this issue 2 months ago • 0 comments

This PR aims to fix #5485.

Briefly, ulevels() was always dropping NAs, leading to data being mapped to non-existing PANELs and generating invalid scale_ids. By including NAs, we prevent these invalid scale_ids.

stat_summary_2d() was also making use of ulevels() where NAs should be dropped. Therefore, ulevels() gets an na.last argument that is propagated to sort() so we can pick when to drop NA and when not.

Reprex from issue:

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

penguins |>
  transform(sex = as.character(sex)) |>
  ggplot() +
  geom_point(aes(x = body_mass_g, y = flipper_length_mm)) +
  facet_wrap(~sex, drop = FALSE)
#> Warning: Removed 2 rows containing missing values or values outside the scale range
#> (`geom_point()`).

Created on 2024-04-18 with reprex v2.1.0

teunbrand avatar Apr 18 '24 08:04 teunbrand