diff --git a/NEWS.md b/NEWS.md index 703c01fe2f..8f07276314 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,8 @@ # ggplot2 (development version) +* When facets coerce the faceting variables to factors, the 'ordered' class + is dropped (@teunbrand, #5666). * `update_geom_defaults()` and `update_stat_defaults()` have a reset mechanism when using `new = NULL` and invisible return the previous defaults (#4993). * `coord_map()` and `coord_polar()` throw informative warnings when used diff --git a/R/facet-grid-.R b/R/facet-grid-.R index b45863e193..43897e4c9c 100644 --- a/R/facet-grid-.R +++ b/R/facet-grid-.R @@ -325,9 +325,9 @@ FacetGrid <- ggproto("FacetGrid", Facet, # Special case of no faceting data$PANEL <- NO_PANEL } else { - facet_vals[] <- lapply(facet_vals[], as.factor) + facet_vals[] <- lapply(facet_vals[], as_unordered_factor) facet_vals[] <- lapply(facet_vals[], addNA, ifany = TRUE) - layout[] <- lapply(layout[], as.factor) + layout[] <- lapply(layout[], as_unordered_factor) keys <- join_keys(facet_vals, layout, by = vars) diff --git a/R/facet-wrap.R b/R/facet-wrap.R index 6f7fb23a87..3fcd05eacd 100644 --- a/R/facet-wrap.R +++ b/R/facet-wrap.R @@ -228,8 +228,8 @@ FacetWrap <- ggproto("FacetWrap", Facet, } facet_vals <- eval_facets(vars, data, params$.possible_columns) - facet_vals[] <- lapply(facet_vals[], as.factor) - layout[] <- lapply(layout[], as.factor) + facet_vals[] <- lapply(facet_vals[], as_unordered_factor) + layout[] <- lapply(layout[], as_unordered_factor) missing_facets <- setdiff(names(vars), names(facet_vals)) if (length(missing_facets) > 0) { diff --git a/R/utilities.R b/R/utilities.R index 83037d475c..9f9133a0b5 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -811,3 +811,9 @@ deprecate_warn0 <- function(..., user_env = NULL) { user_env <- user_env %||% getOption("ggplot2_plot_env") %||% caller_env(2) lifecycle::deprecate_warn(..., user_env = user_env) } + +as_unordered_factor <- function(x) { + x <- as.factor(x) + class(x) <- setdiff(class(x), "ordered") + x +}