Skip to content

Commit e5abb05

Browse files
authored
Arrow key size (tidyverse#5565)
* adjust `draw_key_{v}path()` * adjust derived keys * Add news bullet
1 parent 000a939 commit e5abb05

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

NEWS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# ggplot2 (development version)
22

3+
* Legend keys that can draw arrows have their size adjusted for arrows.
4+
35
* The `trans` argument in scales and secondary axes has been renamed to
46
`transform`. The `trans` argument itself is deprecated. To access the
57
transformation from the scale, a new `get_transformation()` method is

R/legend-draw.R

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ draw_key_path <- function(data, params, size) {
160160
} else {
161161
data$linetype[is.na(data$linetype)] <- 0
162162
}
163-
164-
segmentsGrob(0.1, 0.5, 0.9, 0.5,
163+
grob <- segmentsGrob(0.1, 0.5, 0.9, 0.5,
165164
gp = gpar(
166165
col = alpha(data$colour %||% data$fill %||% "black", data$alpha),
167166
fill = alpha(params$arrow.fill %||% data$colour
@@ -172,12 +171,19 @@ draw_key_path <- function(data, params, size) {
172171
),
173172
arrow = params$arrow
174173
)
174+
if (!is.null(params$arrow)) {
175+
angle <- deg2rad(params$arrow$angle)
176+
length <- convertUnit(params$arrow$length, "cm", valueOnly = TRUE)
177+
attr(grob, "width") <- cos(angle) * length * 1.25
178+
attr(grob, "height") <- sin(angle) * length * 2
179+
}
180+
grob
175181
}
176182

177183
#' @export
178184
#' @rdname draw_key
179185
draw_key_vpath <- function(data, params, size) {
180-
segmentsGrob(0.5, 0.1, 0.5, 0.9,
186+
grob <- segmentsGrob(0.5, 0.1, 0.5, 0.9,
181187
gp = gpar(
182188
col = alpha(data$colour %||% data$fill %||% "black", data$alpha),
183189
lwd = (data$linewidth %||% 0.5) * .pt,
@@ -186,6 +192,13 @@ draw_key_vpath <- function(data, params, size) {
186192
),
187193
arrow = params$arrow
188194
)
195+
if (!is.null(params$arrow)) {
196+
angle <- deg2rad(params$arrow$angle)
197+
length <- convertUnit(params$arrow$length, "cm", valueOnly = TRUE)
198+
attr(grob, "width") <- sin(angle) * length * 2
199+
attr(grob, "height") <- cos(angle) * length * 1.25
200+
}
201+
grob
189202
}
190203

191204
#' @export
@@ -215,10 +228,14 @@ draw_key_linerange <- function(data, params, size) {
215228
#' @export
216229
#' @rdname draw_key
217230
draw_key_pointrange <- function(data, params, size) {
218-
grobTree(
219-
draw_key_linerange(data, params, size),
231+
linerange <- draw_key_linerange(data, params, size)
232+
grob <- grobTree(
233+
linerange,
220234
draw_key_point(transform(data, size = (data$size %||% 1.5) * 4), params)
221235
)
236+
attr(grob, "width") <- attr(linerange, "width")
237+
attr(grob, "height") <- attr(linerange, "height")
238+
grob
222239
}
223240

224241
#' @export
@@ -227,10 +244,15 @@ draw_key_smooth <- function(data, params, size) {
227244
data$fill <- alpha(data$fill %||% "grey60", data$alpha)
228245
data$alpha <- 1
229246

230-
grobTree(
247+
path <- draw_key_path(data, params, size)
248+
249+
grob <- grobTree(
231250
if (isTRUE(params$se)) rectGrob(gp = gpar(col = NA, fill = data$fill)),
232-
draw_key_path(data, params, size)
251+
path
233252
)
253+
attr(grob, "width") <- attr(path, "width")
254+
attr(grob, "height") <- attr(path, "height")
255+
grob
234256
}
235257

236258
#' @export

0 commit comments

Comments
 (0)