Skip to content

Commit

Permalink
Size of text/label keys (#5562)
Browse files Browse the repository at this point in the history
* improve text label

* improve label labels

* add news bullet
  • Loading branch information
teunbrand committed Dec 8, 2023
1 parent 5edfbbe commit e51ca46
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 11 deletions.
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# ggplot2 (development version)

* `draw_key_label()` now better reflects the appearance of labels.

* The `minor_breaks` function argument in scales can now take a function with
two arguments: the scale's limits and the scale's major breaks (#3583).

Expand Down
64 changes: 53 additions & 11 deletions R/legend-draw.R
Original file line number Diff line number Diff line change
Expand Up @@ -236,26 +236,68 @@ 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
#' @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
Expand Down

0 comments on commit e51ca46

Please sign in to comment.