From 7661dd85baa0df48f65fa944ecad91738fd996b5 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Thu, 7 Mar 2024 13:51:43 +0100 Subject: [PATCH 1/3] only sort numeric breaks --- R/guide-bins.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/guide-bins.R b/R/guide-bins.R index 6f253aa0d6..c5f39c9490 100644 --- a/R/guide-bins.R +++ b/R/guide-bins.R @@ -333,8 +333,9 @@ parse_binned_breaks = function(scale, breaks = scale$get_breaks(), if (length(breaks) == 0) { return(NULL) } - breaks <- sort(breaks) + if (is.numeric(breaks)) { + breaks <- sort(breaks) limits <- scale$get_limits() if (!is.numeric(scale$breaks)) { breaks <- breaks[!breaks %in% limits] From bccf2ef0de9303d50dcb5ff36a962544d762ab03 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Thu, 7 Mar 2024 13:52:00 +0100 Subject: [PATCH 2/3] add test --- tests/testthat/test-guides.R | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/testthat/test-guides.R b/tests/testthat/test-guides.R index c37a0c41c9..ef44972eaf 100644 --- a/tests/testthat/test-guides.R +++ b/tests/testthat/test-guides.R @@ -501,6 +501,34 @@ test_that("empty guides are dropped", { expect_equal(lengths(guides, use.names = FALSE), rep(0, 5)) }) +test_that("bins can be parsed by guides for all scale types", { + + breaks <- c(90, 100, 200, 300) + limits <- c(0, 1000) + + sc <- scale_colour_continuous(breaks = breaks) + sc$train(limits) + + expect_equal(parse_binned_breaks(sc)$breaks, breaks) + + sc <- scale_colour_binned(breaks = breaks) + sc$train(limits) + + expect_equal(parse_binned_breaks(sc)$breaks, breaks) + + # Note: discrete binned breaks treats outer breaks as limits + cut <- cut(c(0, 95, 150, 250, 1000), breaks = breaks) + + sc <- scale_colour_discrete() + sc$train(cut) + + parsed <- parse_binned_breaks(sc) + expect_equal( + sort(c(parsed$limits, parsed$breaks)), + breaks + ) +}) + # Visual tests ------------------------------------------------------------ test_that("axis guides are drawn correctly", { From f9c417f1c888e5f59ff48293113ee44724e33ba8 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Thu, 7 Mar 2024 13:53:41 +0100 Subject: [PATCH 3/3] add news bullet --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS.md b/NEWS.md index 3e5ba492ef..5350534c58 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,6 +10,9 @@ * Patterns and gradients are now also enabled in `geom_sf()` (@teunbrand, #5716). * `stat_bin()` deals with non-finite breaks better (@teunbrand, #5665). +* Fixed bug in `guide_bins()` and `guide_coloursteps()` where discrete breaks, + such as the levels produced by `cut()`, were ordered incorrectly + (@teunbrand, #5757). # ggplot2 3.5.0