Skip to content

Commit 18c540e

Browse files
Fix the discrete scale when all values are continuous (#3487)
1 parent 63391d9 commit 18c540e

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

R/scale-discrete-.r

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,18 @@ ScaleDiscretePosition <- ggproto("ScaleDiscretePosition", ScaleDiscrete,
8383
},
8484

8585
get_limits = function(self) {
86-
if (self$is_empty()) {
87-
c(0, 1)
88-
} else if (!is.null(self$limits) & !is.function(self$limits)){
89-
self$limits
90-
} else if (is.null(self$limits)) {
91-
self$range$range
92-
} else if (is.function(self$limits)) {
93-
self$limits(self$range$range)
94-
} else {
95-
integer(0)
96-
}
86+
# if scale contains no information, return the default limit
87+
if (self$is_empty()) {
88+
return(c(0, 1))
89+
}
90+
91+
# if self$limits is not NULL and is a function, apply it to range
92+
if (is.function(self$limits)){
93+
return(self$limits(self$range$range))
94+
}
95+
96+
# self$range$range can be NULL because non-discrete values use self$range_c
97+
self$limits %||% self$range$range %||% integer()
9798
},
9899

99100
is_empty = function(self) {

tests/testthat/test-scale-discrete.R

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ test_that("discrete ranges also encompass continuous values", {
6262
expect_equal(x_range(base + geom_point(aes(x1)) + geom_point(aes(x2))), c(0, 4))
6363
})
6464

65+
test_that("discrete ranges have limits even when all values are continuous", {
66+
scale <- scale_x_discrete()
67+
scale$train(1:3)
68+
expect_identical(scale$get_limits(), integer())
69+
})
70+
6571
test_that("discrete scale shrinks to range when setting limits", {
6672
df <- data_frame(x = letters[1:10], y = 1:10)
6773
p <- ggplot(df, aes(x, y)) + geom_point() +

0 commit comments

Comments
 (0)