ggplot2
                                
                                 ggplot2 copied to clipboard
                                
                                    ggplot2 copied to clipboard
                            
                            
                            
                        Preserve `NA`s in discrete palettes
This PR aims to fix #5929.
Briefly, there are 3 situations by which a value can become NA in a discrete scale.
- The data value is NA.
- The data value does not match the scale limits.
- The data value is mapped to NAbecause a palette value isNA.
Currently, we cannot distinguish between situation (2) and situation (3).
This PR ensures that situation (1) and (2) are laundered through the na.translate/na.value mechanism, but (3) is not because we could assume (3) is intentional by users (see issue).
As a demo, notice that 'e' gets NA due to (3) and is subsequently removed, while 'r' gets na.value due to (2).
devtools::load_all("~/packages/ggplot2/")
#> ℹ Loading ggplot2
ggplot(mpg, aes(displ, hwy, colour = fl)) +
  geom_point() +
  scale_colour_manual(
    values = c("tomato", "dodgerblue", NA, "limegreen"),
    limits = function(x) setdiff(x, "r"),
    na.value = "black"
  )
#> Warning: Removed 8 rows containing missing values or values outside the scale range
#> (`geom_point()`).

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