From 0e1a036441c1209f4cc5361be68f97fd4efdcfb4 Mon Sep 17 00:00:00 2001 From: Hiroaki Yutani Date: Fri, 16 Aug 2019 09:49:41 +0900 Subject: [PATCH 1/2] Add a faling test --- tests/testthat/test-scale-discrete.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/testthat/test-scale-discrete.R b/tests/testthat/test-scale-discrete.R index 79b5c74a17..8f7f32a210 100644 --- a/tests/testthat/test-scale-discrete.R +++ b/tests/testthat/test-scale-discrete.R @@ -62,6 +62,12 @@ test_that("discrete ranges also encompass continuous values", { expect_equal(x_range(base + geom_point(aes(x1)) + geom_point(aes(x2))), c(0, 4)) }) +test_that("discrete ranges have limits even when all values are continuous", { + scale <- scale_x_discrete() + scale$train(1:3) + expect_identical(scale$get_limits(), integer()) +}) + test_that("discrete scale shrinks to range when setting limits", { df <- data_frame(x = letters[1:10], y = 1:10) p <- ggplot(df, aes(x, y)) + geom_point() + From 4ea1d0012ea8ad712808e2c3269eabba9dfa1b01 Mon Sep 17 00:00:00 2001 From: Hiroaki Yutani Date: Fri, 16 Aug 2019 09:58:13 +0900 Subject: [PATCH 2/2] Address the case when self$range$range is NULL --- R/scale-discrete-.r | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/R/scale-discrete-.r b/R/scale-discrete-.r index afcc4a0794..49e7e0eee7 100644 --- a/R/scale-discrete-.r +++ b/R/scale-discrete-.r @@ -83,17 +83,18 @@ ScaleDiscretePosition <- ggproto("ScaleDiscretePosition", ScaleDiscrete, }, get_limits = function(self) { - if (self$is_empty()) { - c(0, 1) - } else if (!is.null(self$limits) & !is.function(self$limits)){ - self$limits - } else if (is.null(self$limits)) { - self$range$range - } else if (is.function(self$limits)) { - self$limits(self$range$range) - } else { - integer(0) - } + # if scale contains no information, return the default limit + if (self$is_empty()) { + return(c(0, 1)) + } + + # if self$limits is not NULL and is a function, apply it to range + if (is.function(self$limits)){ + return(self$limits(self$range$range)) + } + + # self$range$range can be NULL because non-discrete values use self$range_c + self$limits %||% self$range$range %||% integer() }, is_empty = function(self) {