Отрегулируйте высоту и ширину легендарных глифов, сгенерированных key_glyph ggplot - PullRequest
6 голосов
/ 20 февраля 2020

Я был взволнован, обнаружив, что могу изменить глиф, используемый в легенде, добавив key_glyph = draw_key_rect к слою с геом. Я хочу сделать легенду шире и короче, чтобы она напоминала легенду на этой карте: Тимо Гроссенбахер :

Я пытался настроить scale_fill_manual(guide = guide_legend(keyheight = unit(0.01, units = "mm") , keywidth = unit(40, units = "mm"))), который изменяет размеры легенды, но, кажется, работает только тогда, когда я делаю глифы больше. Кажется, я не могу уменьшить высоту ключа.

Есть ли лучший способ настройки размеров глифов легенды?

enter image description here

Упрощенный код здесь:

df <- data_frame(x_value = c(1:10),
                 y_value = c(rev(1:10)),
                 value = c("a","a","a","a","b","b","b","b","c","c"))
library(ggplot2)

ggplot(data = df) + 
  geom_point(aes(x_value, y_value, fill = value),
             shape = 21,
             size = 9,
             key_glyph = draw_key_rect) +
  theme(legend.justification = c(0,0), # set which corner of legend legen.position references
        legend.position = c(0.05, 0.04)) +
  scale_fill_manual(values = c("red", "green", "blue"),
                    guide = guide_legend(direction = "horizontal",
                                         keyheight = unit(0.01, units = "mm"),
                                         keywidth = unit(40, units = "mm"),
                                         title.position = 'top',
                                         label.position = "bottom"))

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете создать поддельную легенду . Или вот еще одно слегка взломанное решение.

Кажется, проблема в аргументе размера в geom_point, поэтому вы можете создать поддельную эстетику c, в частности, используя линии, например, так:

  • сделать прозрачным линии (geom_line(alpha = 0))
  • создают цветовую легенду для geom_line с теми же цветами, что и для заливки.
  • установите альфа на 1 для вашей цветовой легенды (override.aes)
  • удалить легенду заполнения.
  • управление высотой легенды в theme
library(ggplot2)

df <- data.frame(x_value = c(1:10),
                 y_value = c(rev(1:10)),
                 value = c("a","a","a","a","b","b","b","b","c","c"))

ggplot(data = df) + 
  geom_point(aes(x_value, y_value, fill = value), shape = 21, size = 7, 
             show.legend = FALSE) + # remove fill legend
  geom_line(aes(x_value, y_value, color = value), 
            alpha = 0, #invisible line. If your data is big, you could create a very small data frame for that
            key_glyph = draw_key_rect) +
  theme(legend.justification = c(0,0), 
        legend.position = c(0.05, 0.04), 
        legend.key.height = unit(0.1, 'in')) + # control height
  scale_fill_manual(values = c("red", "green", "blue")) +
  scale_color_manual(values = c("red", "green", "blue")) +
  guides(color = guide_legend(override.aes = list(alpha = 1), # make line visible in legend 
                              direction = "horizontal",
                              keywidth = unit(20, units = "mm"),
                              title.position = 'top',
                              label.position = "bottom"))

Создано в 2020-02-20 с помощью Представьте пакет (v0.3.0)

Другой вариант - удалить аргумент key_glyph и управлять высотой глифа с помощью аргумента size в geom_line

...