По какой-то причине ggplot
добавляет границу к фактическим точкам, когда вы используете geom_label
, но не включает границу в легенду. Краткий пример:
library(tidyverse)
mtcars %>%
rownames_to_column('car') %>%
slice(1:10) %>%
ggplot(aes(cyl, mpg, label = car, col = factor(am))) +
geom_label() +
scale_x_continuous(limits = c(2, 10))
Я хочу, чтобы эти маленькие «а» в легенде также имели красную и синюю границы (для ясности, а не границу вокруг всей легенды), но я не могу понять, как это сделать. Я исследовал использование опции override.aes
в функции guides
, но не знаю, можно ли таким образом добавить границу.
Я думаю, что добавление рамки вокруг компонентов легенды «по умолчанию» может быть запросом функции (для ggplot2/issues). Между тем, это хак, который, я надеюсь, кто-то другой сможет заменить более разумной версией.
Добавьте пустой geom_rect
.
mtcars %>%
rownames_to_column('car') %>%
slice(1:10) %>%
ggplot(aes(cyl, mpg, label = car, col = factor(am))) +
geom_label() +
scale_x_continuous(limits = c(2, 10)) +
geom_rect(xmin = NA, xmax = NA, ymin = NA, ymax = NA, fill = NA, na.rm = TRUE)
Как говорит @r2evans, сейчас это сложно сделать простым способом.
Мой ответ достигается путем создания и замены функции, GeomLabel$draw_key
.
(ПРИМЕЧАНИЕ: этот ответ основан на Измените легенду geom_text по умолчанию «a», чтобы пометить саму строку)
library(tidyverse); library(grid)
oldK <- GeomLabel$draw_key # to save for later
# define new key
# if you manually add colours then add vector of colours
# instead of `scales::hue_pal()(length(var))`
GeomLabel$draw_key <- function (data, params, size#,
# var=unique(iris$abbrev),
# cols=scales::hue_pal()(length())
) {
gr <- roundrectGrob(0.5, 0.5, width = 0.9, height = 0.9,
just = "center",
gp = gpar(col = data$colour, fill = NA))
gt <- textGrob("a", 0.5, 0.5,
just = "center",
gp = gpar(col = alpha(data$colour, data$alpha),
fontfamily = data$family,
fontface = data$fontface,
fontsize = data$size * .pt))
grobTree(gr, gt)
}
mtcars %>%
rownames_to_column('car') %>%
slice(1:10) %>%
ggplot(aes(cyl, mpg, label = car, col = factor(am))) +
geom_label() +
scale_x_continuous(limits = c(2, 10))
# reset key
GeomLabel$draw_key <- oldK
да, это хак, но я возьму его. Во-первых, если я
override
изменю текст по умолчанию с «а» на что-то другое, поле не будет расти вместе с длиной текста. то есть добавление...+ guides(color = guide_legend(override.aes = list(label = c('thisthis', 'thatthat'))))