Подтвердить что ты не робот

Ggplot2 увеличивает пробел между клавишами

Как увеличить расстояние между клавишами легенды ggplot2 plot?

library(ggplot2)
ggplot(aes(mpg, wt, colour = factor(cyl)),
       , data = mtcars) +
      geom_point() +
  theme(legend.direction = "horizontal", 
        legend.position = "bottom") +
  guides(color = guide_legend(nrow=2))

введите описание изображения здесь

Я ищу вариант ggplot2, который добавляет вертикальную настройку между (клавиша 4 и ключ 6) в приведенном выше графике? Должен ли я создать собственный ключ легенды?

PS: Я хочу увеличить пустое пространство между ящиками не между метками.

желаемый график:

введите описание изображения здесь

ПРИМЕЧАНИЕ: Нет вопроса, который не дублируется другим вопросом. Мы хотим здесь добавить вертикальное расстояние между элементами, которые уже находятся в нескольких строках. В другом вопросе мы имеем 1-рядную легенду, и мы хотим добавить пробелы (горизонтальные) между элементами.

4b9b3361

Ответ 1

Альтернативное (и, вероятно, проще) решение использует legend.key и legend.key.size в theme части вашего кода:

ggplot(data = mtcars, aes(mpg, wt, colour = factor(cyl))) +
  geom_point() +
  guides(color = guide_legend(nrow = 2)) +
  theme(legend.direction = 'horizontal', 
        legend.position = 'bottom',
        legend.key = element_rect(size = 5),
        legend.key.size = unit(1.5, 'lines'))

это дает:

введите описание изображения здесь


Если вы вызываете theme_bw или theme_classic перед обработкой легенды, вы должны установить цвет прямоугольника легенды:

legend.key = element_rect(size = 5, color = 'white') #or: color = NA

Ответ 2

Здесь используется решение с использованием gtable. В основном я извлекаю таблицу глаголов легенд и добавляю строку в таблицу легенд.

library(gtable)
library(grid)
## transform the ggplot to a grobs table
p_table <- ggplot_gtable(ggplot_build(p))
## extract legend
leg <- which(sapply(p_table$grobs, function(x) x$name) == "guide-box")
## this is the tricky part !
## add  a row in the second position (pos=2)
p_table$grobs[[leg]]$grobs[[1]] <- 
  gtable_add_rows(p_table$grobs[[leg]]$grobs[[1]], 
                  unit(0.5, "line"), ## you can increase the height here
                  pos=2)             ## since I have 2 rows , I insert it in the middle
plot(p_table)  

PS: Я не знаю, как снова принудить таблицу к сюжету! может быть, здесь может помочь кто-то другой (я просто планирую его и теряю структуру объекта)

введите описание изображения здесь