From e07bd8e1682595c76888f799c327effbf72cfc83 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 18 Oct 2024 15:51:14 +0200 Subject: [PATCH 1/7] return break names --- R/scale-.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/scale-.R b/R/scale-.R index 878cc602b9..65ac3b3ee0 100644 --- a/R/scale-.R +++ b/R/scale-.R @@ -1029,7 +1029,7 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, } # Breaks only occur only on values in domain - in_domain <- intersect(breaks, limits) + in_domain <- vec_set_intersect(breaks, limits) structure(in_domain, pos = match(in_domain, breaks)) }, @@ -1083,6 +1083,9 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, } if (is.waive(self$labels)) { + if (!is.null(names(breaks))) { + return(names(breaks)) + } if (is.numeric(breaks)) { # Only format numbers, because on Windows, format messes up encoding format(breaks, justify = "none") From 705feda0acce10fe81b0b8b6c5303f35c0152fb9 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 18 Oct 2024 15:51:18 +0200 Subject: [PATCH 2/7] add test --- tests/testthat/test-scales-breaks-labels.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/testthat/test-scales-breaks-labels.R b/tests/testthat/test-scales-breaks-labels.R index c3a314cacc..3941094a23 100644 --- a/tests/testthat/test-scales-breaks-labels.R +++ b/tests/testthat/test-scales-breaks-labels.R @@ -273,6 +273,17 @@ test_that("equal length breaks and labels can be passed to ViewScales with limit expect_identical(test_view_scale_rev$get_labels(), c(c("0", "20", "40"))) }) +test_that("break names are returned as labels", { + + sc <- scale_x_continuous(breaks = c(A = 10, B = 20, C = 30)) + sc$train(c(10, 30)) + expect_equal(sc$get_labels(), c("A", "B", "C")) + + sc <- scale_x_discrete(breaks = c(foo = "A", bar = "B", qux = "C")) + sc$train(c(LETTERS[1:3])) + expect_equal(sc$get_labels(), c("foo", "bar", "qux")) +}) + # Visual tests ------------------------------------------------------------ test_that("minor breaks draw correctly", { From 7d454978217e966b6e4b8a960ffd0c3a3bb0d42a Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 18 Oct 2024 15:53:36 +0200 Subject: [PATCH 3/7] fix #6089 --- R/axis-secondary.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/axis-secondary.R b/R/axis-secondary.R index 2999bd79b5..56ca0259eb 100644 --- a/R/axis-secondary.R +++ b/R/axis-secondary.R @@ -186,7 +186,7 @@ AxisSecondary <- ggproto("AxisSecondary", NULL, if (is.derived(self$breaks)) self$breaks <- scale$breaks if (is.waive(self$breaks)) { if (scale$is_discrete()) { - self$breaks <- scale$get_breaks() + self$breaks <- setNames(nm = scale$get_breaks()) } else { breaks <- scale$get_transformation()$breaks n_breaks <- scale$n.breaks From 0d1f35ab0810b40360f17e1d46acb2270305d6b1 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 18 Oct 2024 15:55:07 +0200 Subject: [PATCH 4/7] add news bullet --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index f369879868..864de11abc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* When discrete breaks have names, they'll be used as labels by default + (@teunbrand, #6147). * Fixed bug where the `ggplot2::`-prefix did not work with `stage()` (@teunbrand, #6104). * New `get_labs()` function for retrieving completed plot labels From 4916e25bf4ac5409bf5c9930d4bb5f85cbc833f3 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 18 Oct 2024 16:05:09 +0200 Subject: [PATCH 5/7] carry over names --- R/axis-secondary.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/axis-secondary.R b/R/axis-secondary.R index 56ca0259eb..83e0a9a1c3 100644 --- a/R/axis-secondary.R +++ b/R/axis-secondary.R @@ -235,7 +235,7 @@ AxisSecondary <- ggproto("AxisSecondary", NULL, self$mono_test(scale) breaks <- self$breaks } else { - breaks <- scale$map(self$breaks) + breaks <- setNames(scale$map(self$breaks), names(self$breaks)) } # Get scale's original range before transformation From e9cad1a625bfad216432007dd08d9937bd3b368a Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 21 Oct 2024 09:49:55 +0200 Subject: [PATCH 6/7] prevent name-dropping --- R/scale-.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/scale-.R b/R/scale-.R index 65ac3b3ee0..cbc83a0722 100644 --- a/R/scale-.R +++ b/R/scale-.R @@ -1029,7 +1029,8 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, } # Breaks only occur only on values in domain - in_domain <- vec_set_intersect(breaks, limits) + breaks <- setNames(mtfrm(breaks), names(breaks)) + in_domain <- vec_set_intersect(breaks, mtfrm(limits)) structure(in_domain, pos = match(in_domain, breaks)) }, From f38cf14e263f7bca2793b92088909b905d45bc3f Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 21 Oct 2024 10:01:15 +0200 Subject: [PATCH 7/7] swap `mtfrm()` for `as.character()` --- R/scale-.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/scale-.R b/R/scale-.R index cbc83a0722..43bee7e60a 100644 --- a/R/scale-.R +++ b/R/scale-.R @@ -1029,8 +1029,8 @@ ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, } # Breaks only occur only on values in domain - breaks <- setNames(mtfrm(breaks), names(breaks)) - in_domain <- vec_set_intersect(breaks, mtfrm(limits)) + breaks <- setNames(as.character(breaks), names(breaks)) + in_domain <- vec_set_intersect(breaks, as.character(limits)) structure(in_domain, pos = match(in_domain, breaks)) },