From 4bc34eacb76d77a37ebd32e63ab3a15a2dd67814 Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Tue, 4 Apr 2017 10:09:08 +0200 Subject: [PATCH 1/3] Sample points uniformly from transformed space --- NEWS.md | 3 + R/axis-secondary.R | 4 +- tests/figs/deps.txt | 2 +- tests/figs/sec-axis/dup-axis.svg | 162 +++++++++++++++++ .../figs/sec-axis/sec-axis-custom-breaks.svg | 165 +++++++++++++++++ .../sec-axis/sec-axis-skewed-transform.svg | 166 ++++++++++++++++++ tests/testthat/test-sec-axis.R | 45 +++++ 7 files changed, 544 insertions(+), 3 deletions(-) create mode 100644 tests/figs/sec-axis/dup-axis.svg create mode 100644 tests/figs/sec-axis/sec-axis-custom-breaks.svg create mode 100644 tests/figs/sec-axis/sec-axis-skewed-transform.svg create mode 100644 tests/testthat/test-sec-axis.R diff --git a/NEWS.md b/NEWS.md index 703e265c05..fa57e3a613 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,8 @@ # ggplot2 2.2.1.9000 +* Fix bug in secondary axis that would lead to incorrectly placed ticks with + strong transforms (@thomasp85, #1992) + * `geom_smooth` now orders by the `x` aesthetic, making it easier to pass pre-computed values without manual ordering (@izahn, #2028). diff --git a/R/axis-secondary.R b/R/axis-secondary.R index 9b808a81a2..110db801ed 100644 --- a/R/axis-secondary.R +++ b/R/axis-secondary.R @@ -118,10 +118,10 @@ AxisSecondary <- ggproto("AxisSecondary", NULL, if (self$empty()) return() # Get original range before transformation - inv_range <- scale$trans$inverse(range) + along_range <- seq(range[1], range[2], length.out = self$detail) + old_range <- scale$trans$inverse(along_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 monotony diff --git a/tests/figs/deps.txt b/tests/figs/deps.txt index 263e86625b..9267df5c0e 100644 --- a/tests/figs/deps.txt +++ b/tests/figs/deps.txt @@ -1,3 +1,3 @@ -vdiffr: 0.1.1.9000 +vdiffr: 0.1.1 svglite: 1.2.0.9001 ggplot2: 2.2.1.9000 diff --git a/tests/figs/sec-axis/dup-axis.svg b/tests/figs/sec-axis/dup-axis.svg new file mode 100644 index 0000000000..e042bd9552 --- /dev/null +++ b/tests/figs/sec-axis/dup-axis.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +250 +500 +750 +1000 + + + + + +0.00 +0.25 +0.50 +0.75 +1.00 + + + + + + + + + + +0 +250 +500 +750 +1000 +Unit A +Unit A +y +dup_axis + diff --git a/tests/figs/sec-axis/sec-axis-custom-breaks.svg b/tests/figs/sec-axis/sec-axis-custom-breaks.svg new file mode 100644 index 0000000000..706f54e6f8 --- /dev/null +++ b/tests/figs/sec-axis/sec-axis-custom-breaks.svg @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1e-03 +1e-02 +1e-01 +1e+00 +1e+01 +1e+02 +1e+03 + + + + + + + +0.00 +0.25 +0.50 +0.75 +1.00 + + + + + + + + + + +0 +250 +500 +750 +1000 +Unit A +y +sec_axis, custom breaks + diff --git a/tests/figs/sec-axis/sec-axis-skewed-transform.svg b/tests/figs/sec-axis/sec-axis-skewed-transform.svg new file mode 100644 index 0000000000..ca727e8bd8 --- /dev/null +++ b/tests/figs/sec-axis/sec-axis-skewed-transform.svg @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1e-01 +1e+00 +1e+01 +1e+02 +1e+03 + + + + + +0.00 +0.25 +0.50 +0.75 +1.00 + + + + + + + + + + + + +1e-03 +1e-02 +1e-01 +1e+00 +1e+01 +1e+02 +1e+03 +Unit B +Unit A +y +sec_axis, skewed transform + diff --git a/tests/testthat/test-sec-axis.R b/tests/testthat/test-sec-axis.R new file mode 100644 index 0000000000..3a13bdd9bf --- /dev/null +++ b/tests/testthat/test-sec-axis.R @@ -0,0 +1,45 @@ +context("sec-axis") + +x <- exp(seq(log(0.001), log(1000), length.out = 100)) +foo <- data.frame( + x = x, + y = x/(1+x) +) + +test_that("dup_axis() works", { + vdiffr::expect_doppelganger( + "dup_axis", + ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_continuous(name = "Unit A", + sec.axis = dup_axis()) + ) +}) + +test_that("custom breaks works", { + vdiffr::expect_doppelganger( + "sec_axis, custom breaks", + ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_continuous( + name = "Unit A", + sec.axis = sec_axis( + trans = y~., + breaks = c(0.001, 0.01, 0.1, 1, 10, 100, 1000) + ) + ) + ) +}) + +test_that("sec axis works with skewed transform", { + vdiffr::expect_doppelganger( + "sec_axis, skewed transform", + ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_continuous(name = "Unit A", trans = 'log', + breaks = c(0.001, 0.01, 0.1, 1, 10, 100, 1000), + sec.axis = sec_axis(~. * 100, name = "Unit B", + labels = derive(), + breaks = derive())) + ) +}) From c17c4844300ae32b311f57391ea7bb5cf15a397f Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Tue, 11 Jul 2017 21:58:03 +0200 Subject: [PATCH 2/3] Change visual tests to regular ones --- tests/testthat/test-sec-axis.R | 39 ++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/tests/testthat/test-sec-axis.R b/tests/testthat/test-sec-axis.R index 3a13bdd9bf..2033eb0cfd 100644 --- a/tests/testthat/test-sec-axis.R +++ b/tests/testthat/test-sec-axis.R @@ -7,28 +7,31 @@ foo <- data.frame( ) test_that("dup_axis() works", { - vdiffr::expect_doppelganger( - "dup_axis", - ggplot(foo, aes(x, y)) + - geom_point() + - scale_x_continuous(name = "Unit A", - sec.axis = dup_axis()) - ) + p <- ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_continuous(name = "Unit A", + sec.axis = dup_axis()) + scale <- layer_scales(p)$x + expect_equal(scale$sec_name(), scale$name) + breaks <- scale$break_info() + expect_equal(breaks$minor, breaks$sec.minor) + expect_equal(breaks$major_source, breaks$sec.major_source) }) test_that("custom breaks works", { - vdiffr::expect_doppelganger( - "sec_axis, custom breaks", - ggplot(foo, aes(x, y)) + - geom_point() + - scale_x_continuous( - name = "Unit A", - sec.axis = sec_axis( - trans = y~., - breaks = c(0.001, 0.01, 0.1, 1, 10, 100, 1000) - ) + custom_breaks <- c(0.01, 0.1, 1, 10, 100) + p <- ggplot(foo, aes(x, y)) + + geom_point() + + scale_x_continuous( + name = "Unit A", + sec.axis = sec_axis( + trans = y~., + breaks = custom_breaks ) - ) + ) + scale <- layer_scales(p)$x + breaks <- scale$break_info() + expect_equal(custom_breaks, breaks$sec.major_source) }) test_that("sec axis works with skewed transform", { From 9b01bcc5910b0fa3098cb89c2c525663013baff6 Mon Sep 17 00:00:00 2001 From: Thomas Lin Pedersen Date: Mon, 7 Aug 2017 21:35:00 +0200 Subject: [PATCH 3/3] Remove svg files from deleted visual test cases --- tests/figs/sec-axis/dup-axis.svg | 162 ----------------- .../figs/sec-axis/sec-axis-custom-breaks.svg | 165 ------------------ 2 files changed, 327 deletions(-) delete mode 100644 tests/figs/sec-axis/dup-axis.svg delete mode 100644 tests/figs/sec-axis/sec-axis-custom-breaks.svg diff --git a/tests/figs/sec-axis/dup-axis.svg b/tests/figs/sec-axis/dup-axis.svg deleted file mode 100644 index e042bd9552..0000000000 --- a/tests/figs/sec-axis/dup-axis.svg +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0 -250 -500 -750 -1000 - - - - - -0.00 -0.25 -0.50 -0.75 -1.00 - - - - - - - - - - -0 -250 -500 -750 -1000 -Unit A -Unit A -y -dup_axis - diff --git a/tests/figs/sec-axis/sec-axis-custom-breaks.svg b/tests/figs/sec-axis/sec-axis-custom-breaks.svg deleted file mode 100644 index 706f54e6f8..0000000000 --- a/tests/figs/sec-axis/sec-axis-custom-breaks.svg +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1e-03 -1e-02 -1e-01 -1e+00 -1e+01 -1e+02 -1e+03 - - - - - - - -0.00 -0.25 -0.50 -0.75 -1.00 - - - - - - - - - - -0 -250 -500 -750 -1000 -Unit A -y -sec_axis, custom breaks -