From 712c288d4e0ea702b5537c816ac6f422dc3346e1 Mon Sep 17 00:00:00 2001 From: Hiroaki Yutani Date: Wed, 22 Apr 2020 19:13:40 +0900 Subject: [PATCH 1/2] Add a failing test --- tests/testthat/test-scales-breaks-labels.r | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-scales-breaks-labels.r b/tests/testthat/test-scales-breaks-labels.r index 3c8edf800a..b64b4b8186 100644 --- a/tests/testthat/test-scales-breaks-labels.r +++ b/tests/testthat/test-scales-breaks-labels.r @@ -260,7 +260,12 @@ test_that("equal length breaks and labels can be passed to ViewScales with limit test_view_scale <- view_scale_primary(test_scale) expect_identical(test_view_scale$get_breaks(), c(NA, 20, NA)) - expect_identical(test_scale$get_labels(), c(c("0", "20", "40"))) + expect_identical(test_view_scale$get_labels(), c(c("0", "20", "40"))) + + # ViewScale accepts the limits in the opposite order (#3952) + test_view_scale_rev <- view_scale_primary(test_scale, limits = rev(test_scale$get_limits())) + expect_identical(test_view_scale_rev$get_breaks(), c(NA, 20, NA)) + expect_identical(test_view_scale_rev$get_labels(), c(c("0", "20", "40"))) }) # Visual tests ------------------------------------------------------------ From e52cba831a4597e4583613123fa0c4d4d9906ff8 Mon Sep 17 00:00:00 2001 From: Hiroaki Yutani Date: Wed, 22 Apr 2020 19:54:22 +0900 Subject: [PATCH 2/2] Sort the limits in ascending order --- R/scale-view.r | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/scale-view.r b/R/scale-view.r index 689daa97ca..67b291e4ad 100644 --- a/R/scale-view.r +++ b/R/scale-view.r @@ -16,7 +16,9 @@ view_scale_primary <- function(scale, limits = scale$get_limits(), continuous_range = scale$dimension(limits = limits)) { if(!scale$is_discrete()) { - breaks <- scale$get_breaks(continuous_range) + # continuous_range can be specified in arbitrary order, but + # continuous scales expect the one in ascending order. + breaks <- scale$get_breaks(sort(continuous_range)) minor_breaks <- scale$get_breaks_minor(b = breaks, limits = continuous_range) } else { breaks <- scale$get_breaks(limits)