From a9efd75a73ae0411442a31e8f616126c0a9a83bc Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Tue, 10 Dec 2024 09:37:21 +0100 Subject: [PATCH 1/3] fallback for zero-range limits --- R/scale-.R | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/R/scale-.R b/R/scale-.R index 4bf54328b3..3b7d4594f1 100644 --- a/R/scale-.R +++ b/R/scale-.R @@ -1286,9 +1286,17 @@ ScaleBinned <- ggproto("ScaleBinned", Scale, new_limits[1] <- breaks[1] breaks <- breaks[-1] } - } else { + } else if (nbreaks == 1) { bin_size <- max(breaks[1] - limits[1], limits[2] - breaks[1]) new_limits <- c(breaks[1] - bin_size, breaks[1] + bin_size) + } else { + new_limits <- limits + if (zero_range(new_limits)) { + # 0.1 is the same width as the expansion `default_expansion()` + # gives for 0-width data + new_limits <- new_limits + c(-0.05, 0.05) + } + breaks <- new_limits } new_limits_trans <- suppressWarnings(transformation$transform(new_limits)) limits[is.finite(new_limits_trans)] <- new_limits[is.finite(new_limits_trans)] From 0bd2965e46b373f658e46bfbdb918d47a2154786 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Tue, 10 Dec 2024 09:39:01 +0100 Subject: [PATCH 2/3] add test --- tests/testthat/test-scale-binned.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/testthat/test-scale-binned.R b/tests/testthat/test-scale-binned.R index 527d862339..22ce6ef12a 100644 --- a/tests/testthat/test-scale-binned.R +++ b/tests/testthat/test-scale-binned.R @@ -104,3 +104,9 @@ test_that('binned scales can calculate breaks on date-times', { ))) ) }) + +test_that("binned scales can calculate breaks for zero-width data", { + scale <- scale_x_binned() + scale$train(c(1, 1)) + expect_equal(scale$get_breaks(), c(0.95, 1.05)) +}) From 4eb20b84aea58231dee5e7a323bffaca591c61ba Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Tue, 10 Dec 2024 09:40:55 +0100 Subject: [PATCH 3/3] add news bullet --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index dd574ac1aa..ccca6f987c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* Binned scales with zero-width data expand the default limits by 0.1 + (@teunbrand, #5066) * `guide_*()` can now accept two inside legend theme elements: `legend.position.inside` and `legend.justification.inside`, allowing inside legends to be placed at different positions. Only inside legends with the same