Skip to content

Commit a46cc6c

Browse files
AnneLyngpaleolimbot
authored andcommitted
Allowed reversing of discrete position scales (#3426, fixes #3115)
* reverse discrete position scales - get_limits
1 parent 1c5ec62 commit a46cc6c

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

NEWS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# ggplot2 (development version)
22

3+
* Allowed reversing of discrete scales by re-writing `get_limits()` (@AnneLyng, #3115)
4+
35
* Added `stat_contour_filled()` and `geom_contour_filled()`, which compute
46
and draw filled contours of gridded data (@paleolimbot, #3044).
57

R/scale-discrete-.r

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

8585
get_limits = function(self) {
86-
if (self$is_empty()) return(c(0, 1))
87-
88-
self$limits %||% self$range$range %||% integer()
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+
}
8997
},
9098

9199
is_empty = function(self) {

tests/testthat/test-scale-discrete.R

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,9 @@ test_that("discrete scale shrinks to range when setting limits", {
6969

7070
expect_equal(layer_scales(p)$x$dimension(c(0, 1)), c(0, 3))
7171
})
72+
73+
test_that("discrete position scales can accept functional limits", {
74+
scale <- scale_x_discrete(limits = rev)
75+
scale$train(c("a", "b", "c"))
76+
expect_identical(scale$get_limits(), c("c", "b", "a"))
77+
})

0 commit comments

Comments
 (0)