From 91b9b8f13bc50d347d71e27d052002d3a63109f5 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 4 Dec 2023 11:10:19 +0100 Subject: [PATCH 1/3] improve text label --- R/legend-draw.R | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/R/legend-draw.R b/R/legend-draw.R index 5f8c202f07..1a6f6d9889 100644 --- a/R/legend-draw.R +++ b/R/legend-draw.R @@ -236,17 +236,26 @@ draw_key_smooth <- function(data, params, size) { #' @export #' @rdname draw_key draw_key_text <- function(data, params, size) { - if(is.null(data$label)) data$label <- "a" - - textGrob(data$label, 0.5, 0.5, - rot = data$angle %||% 0, + data$label <- data$label %||% "a" + just <- rotate_just(data$angle, data$hjust, data$vjust) + grob <- titleGrob( + data$label, + x = unit(just$hjust, "npc"), y = unit(just$vjust, "npc"), + angle = data$angle, + hjust = data$hjust, + vjust = data$vjust, gp = gpar( col = alpha(data$colour %||% data$fill %||% "black", data$alpha), - fontfamily = data$family %||% "", - fontface = data$fontface %||% 1, - fontsize = (data$size %||% 3.88) * .pt - ) + fontfamily = data$family %||% "", + fontface = data$fontface %||% 1, + fontsize = (data$size %||% 3.88) * .pt + ), + margin = margin(0.1, 0.1, 0.1, 0.1, unit = "lines"), + margin_x = TRUE, margin_y = TRUE ) + attr(grob, "width") <- convertWidth(grobWidth(grob), "cm", valueOnly = TRUE) + attr(grob, "height") <- convertHeight(grobHeight(grob), "cm", valueOnly = TRUE) + grob } #' @export From ffdbfb0bb4fb3ff5c6463c4e7cf00d73501d33e5 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 4 Dec 2023 11:11:20 +0100 Subject: [PATCH 2/3] improve label labels --- R/legend-draw.R | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/R/legend-draw.R b/R/legend-draw.R index 1a6f6d9889..3cc22857f9 100644 --- a/R/legend-draw.R +++ b/R/legend-draw.R @@ -261,10 +261,43 @@ draw_key_text <- function(data, params, size) { #' @export #' @rdname draw_key draw_key_label <- function(data, params, size) { - grobTree( - draw_key_rect(data, list()), - draw_key_text(data, list()) + data$label <- data$label %||% "a" + just <- rotate_just(data$angle, data$hjust, data$vjust) + padding <- rep(params$label.padding, length.out = 4) + descent <- font_descent( + family = data$family %||% "", + face = data$fontface %||% 1, + size = data$size %||% 3.88 + ) + grob <- labelGrob( + data$label, + x = unit(just$hjust, "npc"), + y = unit(just$vjust, "npc") + descent, + angle = data$angle, + just = c(data$hjust, data$vjust), + padding = padding, + r = params$label.r, + text.gp = gpar( + col = data$colour %||% "black", + fontfamily = data$family %||% "", + fontface = data$fontface %||% 1, + fontsize = (data$size %||% 3.88) * .pt + ), + rect.gp = gpar( + col = if (isTRUE(all.equal(params$label.size, 0))) NA else data$colour, + fill = alpha(data$fill %||% "white", data$alpha), + lwd = params$label.size * .pt + ) ) + angle <- deg2rad(data$angle %||% 0) + text <- grob$children[[2]] + width <- convertWidth(grobWidth(text), "cm", valueOnly = TRUE) + height <- convertHeight(grobHeight(text), "cm", valueOnly = TRUE) + x <- c(0, 0, width, width) + y <- c(0, height, height, 0) + attr(grob, "width") <- diff(range(x * cos(angle) - y * sin(angle))) + attr(grob, "height") <- diff(range(x * sin(angle) + y * cos(angle))) + grob } #' @export From 4011971be64c93ca4b9892f4f543123ab94def51 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 4 Dec 2023 11:26:32 +0100 Subject: [PATCH 3/3] add news bullet --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 1cbd49cf1d..0611143fa9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* `draw_key_label()` now better reflects the appearance of labels. + * The `legend.key` theme element is set to inherit from the `panel.background` theme element. The default themes no longer set the `legend.key` element. This causes a visual change with the default `theme_gray()` (#5549).