From e991246981343268fdbc483ff0269571e72aaac4 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 4 Dec 2023 14:37:41 +0100 Subject: [PATCH 1/3] adjust `draw_key_{v}path()` --- R/legend-draw.R | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/R/legend-draw.R b/R/legend-draw.R index 5f8c202f07..6794e2d652 100644 --- a/R/legend-draw.R +++ b/R/legend-draw.R @@ -160,8 +160,7 @@ draw_key_path <- function(data, params, size) { } else { data$linetype[is.na(data$linetype)] <- 0 } - - segmentsGrob(0.1, 0.5, 0.9, 0.5, + grob <- segmentsGrob(0.1, 0.5, 0.9, 0.5, gp = gpar( col = alpha(data$colour %||% data$fill %||% "black", data$alpha), fill = alpha(params$arrow.fill %||% data$colour @@ -172,12 +171,19 @@ draw_key_path <- function(data, params, size) { ), arrow = params$arrow ) + if (!is.null(params$arrow)) { + angle <- deg2rad(params$arrow$angle) + length <- convertUnit(params$arrow$length, "cm", valueOnly = TRUE) + attr(grob, "width") <- cos(angle) * length * 1.25 + attr(grob, "height") <- sin(angle) * length * 2 + } + grob } #' @export #' @rdname draw_key draw_key_vpath <- function(data, params, size) { - segmentsGrob(0.5, 0.1, 0.5, 0.9, + grob <- segmentsGrob(0.5, 0.1, 0.5, 0.9, gp = gpar( col = alpha(data$colour %||% data$fill %||% "black", data$alpha), lwd = (data$linewidth %||% 0.5) * .pt, @@ -186,6 +192,13 @@ draw_key_vpath <- function(data, params, size) { ), arrow = params$arrow ) + if (!is.null(params$arrow)) { + angle <- deg2rad(params$arrow$angle) + length <- convertUnit(params$arrow$length, "cm", valueOnly = TRUE) + attr(grob, "width") <- sin(angle) * length * 2 + attr(grob, "height") <- cos(angle) * length * 1.25 + } + grob } #' @export From ea80d8cdb1f4e808975610ee3a8bdc838ec1d795 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 4 Dec 2023 14:37:48 +0100 Subject: [PATCH 2/3] adjust derived keys --- R/legend-draw.R | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/R/legend-draw.R b/R/legend-draw.R index 6794e2d652..0c8bd42627 100644 --- a/R/legend-draw.R +++ b/R/legend-draw.R @@ -228,10 +228,14 @@ draw_key_linerange <- function(data, params, size) { #' @export #' @rdname draw_key draw_key_pointrange <- function(data, params, size) { - grobTree( - draw_key_linerange(data, params, size), + linerange <- draw_key_linerange(data, params, size) + grob <- grobTree( + linerange, draw_key_point(transform(data, size = (data$size %||% 1.5) * 4), params) ) + attr(grob, "width") <- attr(linerange, "width") + attr(grob, "height") <- attr(linerange, "height") + grob } #' @export @@ -240,10 +244,15 @@ draw_key_smooth <- function(data, params, size) { data$fill <- alpha(data$fill %||% "grey60", data$alpha) data$alpha <- 1 - grobTree( + path <- draw_key_path(data, params, size) + + grob <- grobTree( if (isTRUE(params$se)) rectGrob(gp = gpar(col = NA, fill = data$fill)), - draw_key_path(data, params, size) + path ) + attr(grob, "width") <- attr(path, "width") + attr(grob, "height") <- attr(path, "height") + grob } #' @export From f16d6c271f8590d1652746368ad6dc4cef3763e5 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Mon, 4 Dec 2023 14:37:55 +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..8cfd95732e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # ggplot2 (development version) +* Legend keys that can draw arrows have their size adjusted for arrows. + * 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).