Skip to content

Commit e51ca46

Browse files
authored
Size of text/label keys (#5562)
* improve text label * improve label labels * add news bullet
1 parent 5edfbbe commit e51ca46

File tree

2 files changed

+55
-11
lines changed

2 files changed

+55
-11
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+
* `draw_key_label()` now better reflects the appearance of labels.
4+
35
* The `minor_breaks` function argument in scales can now take a function with
46
two arguments: the scale's limits and the scale's major breaks (#3583).
57

R/legend-draw.R

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -236,26 +236,68 @@ draw_key_smooth <- function(data, params, size) {
236236
#' @export
237237
#' @rdname draw_key
238238
draw_key_text <- function(data, params, size) {
239-
if(is.null(data$label)) data$label <- "a"
240-
241-
textGrob(data$label, 0.5, 0.5,
242-
rot = data$angle %||% 0,
239+
data$label <- data$label %||% "a"
240+
just <- rotate_just(data$angle, data$hjust, data$vjust)
241+
grob <- titleGrob(
242+
data$label,
243+
x = unit(just$hjust, "npc"), y = unit(just$vjust, "npc"),
244+
angle = data$angle,
245+
hjust = data$hjust,
246+
vjust = data$vjust,
243247
gp = gpar(
244248
col = alpha(data$colour %||% data$fill %||% "black", data$alpha),
245-
fontfamily = data$family %||% "",
246-
fontface = data$fontface %||% 1,
247-
fontsize = (data$size %||% 3.88) * .pt
248-
)
249+
fontfamily = data$family %||% "",
250+
fontface = data$fontface %||% 1,
251+
fontsize = (data$size %||% 3.88) * .pt
252+
),
253+
margin = margin(0.1, 0.1, 0.1, 0.1, unit = "lines"),
254+
margin_x = TRUE, margin_y = TRUE
249255
)
256+
attr(grob, "width") <- convertWidth(grobWidth(grob), "cm", valueOnly = TRUE)
257+
attr(grob, "height") <- convertHeight(grobHeight(grob), "cm", valueOnly = TRUE)
258+
grob
250259
}
251260

252261
#' @export
253262
#' @rdname draw_key
254263
draw_key_label <- function(data, params, size) {
255-
grobTree(
256-
draw_key_rect(data, list()),
257-
draw_key_text(data, list())
264+
data$label <- data$label %||% "a"
265+
just <- rotate_just(data$angle, data$hjust, data$vjust)
266+
padding <- rep(params$label.padding, length.out = 4)
267+
descent <- font_descent(
268+
family = data$family %||% "",
269+
face = data$fontface %||% 1,
270+
size = data$size %||% 3.88
271+
)
272+
grob <- labelGrob(
273+
data$label,
274+
x = unit(just$hjust, "npc"),
275+
y = unit(just$vjust, "npc") + descent,
276+
angle = data$angle,
277+
just = c(data$hjust, data$vjust),
278+
padding = padding,
279+
r = params$label.r,
280+
text.gp = gpar(
281+
col = data$colour %||% "black",
282+
fontfamily = data$family %||% "",
283+
fontface = data$fontface %||% 1,
284+
fontsize = (data$size %||% 3.88) * .pt
285+
),
286+
rect.gp = gpar(
287+
col = if (isTRUE(all.equal(params$label.size, 0))) NA else data$colour,
288+
fill = alpha(data$fill %||% "white", data$alpha),
289+
lwd = params$label.size * .pt
290+
)
258291
)
292+
angle <- deg2rad(data$angle %||% 0)
293+
text <- grob$children[[2]]
294+
width <- convertWidth(grobWidth(text), "cm", valueOnly = TRUE)
295+
height <- convertHeight(grobHeight(text), "cm", valueOnly = TRUE)
296+
x <- c(0, 0, width, width)
297+
y <- c(0, height, height, 0)
298+
attr(grob, "width") <- diff(range(x * cos(angle) - y * sin(angle)))
299+
attr(grob, "height") <- diff(range(x * sin(angle) + y * cos(angle)))
300+
grob
259301
}
260302

261303
#' @export

0 commit comments

Comments
 (0)