From 23ed929a48b058d37f43f30721dfebb91199c922 Mon Sep 17 00:00:00 2001 From: Teun van den Brand <49372158+teunbrand@users.noreply.github.com> Date: Thu, 1 Dec 2022 20:30:35 +0100 Subject: [PATCH 1/2] Handle break length < 2 --- R/scale-.r | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/R/scale-.r b/R/scale-.r index b0065ffd52..f28e01963f 100644 --- a/R/scale-.r +++ b/R/scale-.r @@ -1021,16 +1021,22 @@ ScaleBinned <- ggproto("ScaleBinned", Scale, x <- self$rescale(self$oob(x, range = limits), limits) breaks <- self$rescale(breaks, limits) - x_binned <- cut(x, breaks, - labels = FALSE, - include.lowest = TRUE, - right = self$right - ) + if (length(breaks) > 1) { + x_binned <- cut(x, breaks, + labels = FALSE, + include.lowest = TRUE, + right = self$right + ) + midpoints <- breaks[-1] - diff(breaks) / 2 + } else { + x_binned <- 1L + midpoints <- 0.5 + } if (!is.null(self$palette.cache)) { pal <- self$palette.cache } else { - pal <- self$palette(breaks[-1] - diff(breaks) / 2) + pal <- self$palette(midpoints) self$palette.cache <- pal } From 42a0cd05cf1abfeea4818e85d5f223fa4abc5cc4 Mon Sep 17 00:00:00 2001 From: Teun van den Brand <49372158+teunbrand@users.noreply.github.com> Date: Thu, 1 Dec 2022 20:33:28 +0100 Subject: [PATCH 2/2] Add NEWS bullet --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS.md b/NEWS.md index 582d9f2794..a07e26d3c1 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,8 @@ # ggplot2 (development version) +* `scale_*_binned()` handles zero-range limits more gracefully (@teunbrand, + #5066) + # ggplot2 3.4.0 This is a minor release focusing on tightening up the internals and ironing out some inconsistencies in the API. The biggest change is the addition of the