From 606dad7880bade4c82278758e0313f8e87671e34 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Wed, 1 May 2024 10:27:42 +0200 Subject: [PATCH 1/3] oob breaks are discarded --- R/guide-bins.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/guide-bins.R b/R/guide-bins.R index 571a461d4b..e2bd0db428 100644 --- a/R/guide-bins.R +++ b/R/guide-bins.R @@ -339,6 +339,7 @@ parse_binned_breaks = function(scale, breaks = scale$get_breaks()) { if (!is.numeric(scale$breaks)) { breaks <- breaks[!breaks %in% limits] } + breaks <- oob_discard(breaks, limits) all_breaks <- unique0(c(limits[1], breaks, limits[2])) bin_at <- all_breaks[-1] - diff(all_breaks) / 2 } else { From d7947fd716e880303d2b7e76318751ee6397a37a Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Wed, 1 May 2024 10:27:48 +0200 Subject: [PATCH 2/3] add test --- tests/testthat/test-guides.R | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/testthat/test-guides.R b/tests/testthat/test-guides.R index 4930188025..8d677dc1bf 100644 --- a/tests/testthat/test-guides.R +++ b/tests/testthat/test-guides.R @@ -300,6 +300,14 @@ test_that("guide_coloursteps and guide_bins return ordered breaks", { g <- guide_bins() key <- g$train(scale = scale, aesthetics = "colour")$key expect_true(all(diff(key$.value) > 0)) + + # Out of bound breaks are removed + scale <- scale_colour_viridis_c(breaks = c(10, 20, 30, 40, 50), na.value = "grey50") + scale$train(c(15, 45)) + + g <- guide_colorsteps() + key <- g$train(scale = scale, aesthetic = "colour")$key + expect_equal(sum(key$colour == "grey50"), 0) }) test_that("guide_coloursteps can parse (un)even steps from discrete scales", { From c3cccc37e4c681e7174a64a343f29dab15076773 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Wed, 1 May 2024 10:28:44 +0200 Subject: [PATCH 3/3] add news bullet --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 070c74dd40..a87d9ace37 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* Fixed bug where binned guides would keep out-of-bounds breaks + (@teunbrand, #5870). * (Internal) Applying defaults in `geom_sf()` has moved from the internal `sf_grob()` to `GeomSf$use_defaults()` (@teunbrand). * `facet_wrap()` has new options for the `dir` argument to more precisely