diff --git a/R/axis-secondary.R b/R/axis-secondary.R index eaad444d79..a7eb19546d 100644 --- a/R/axis-secondary.R +++ b/R/axis-secondary.R @@ -113,10 +113,10 @@ AxisSecondary <- ggproto("AxisSecondary", NULL, if (self$empty()) return() # Get original range before transformation - along_range <- seq(range[1], range[2], length.out = self$detail) - old_range <- scale$trans$inverse(along_range) + inv_range <- scale$trans$inverse(range) # Create mapping between primary and secondary range + old_range <- seq(inv_range[1], inv_range[2], length.out = self$detail) full_range <- self$transform_range(old_range) # Test for monotonicity diff --git a/tests/testthat/test-sec-axis.R b/tests/testthat/test-sec-axis.R index 56284cc415..ced8c58ef3 100644 --- a/tests/testthat/test-sec-axis.R +++ b/tests/testthat/test-sec-axis.R @@ -115,3 +115,19 @@ test_that("sec axis works with tidy eval", { expect_equal(breaks$major_source / 10, breaks$sec.major_source) }) + +test_that("sec_axis() works for power transformations (monotonicity test doesn't fail)", { + p <- ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_sqrt(sec.axis = dup_axis()) + scale <- layer_scales(p)$x + breaks <- scale$break_info() + expect_equal(breaks$major, breaks$sec.major, tolerance = .001) + + p <- ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_sqrt(sec.axis = sec_axis(~. * 100)) + scale <- layer_scales(p)$x + breaks <- scale$break_info() + expect_equal(breaks$major, breaks$sec.major, tolerance = .001) +})