Интервал между ключами легенды для нескольких легенд в ggplot2 в R - PullRequest
5 голосов
/ 08 июля 2019

Я искал в интернете и не смог найти решение для моей проблемы.

Итак, для большей ясности скажем, что у нас есть график с двумя легендами, как показано ниже:

library(ggplot2)

ggplot() + 
  geom_point(data = mtcars, aes(x = disp, y = mpg, color = gear), 
             pch =20, size=18) + 
  geom_line(data = mtcars, aes(x = disp, y = mpg, size = disp/mpg*100)) +
  scale_size(range = c(0,3.5)) +
  guides(size = guide_legend("", order = 1, keywidth = 2, keyheight = 1.5), 
         color = guide_legend("", order = 2, keywidth = 1, keyheight = 1 )) +
  labs(x = "disp", y = "mpg") +
  geom_text(size=2.7, color = "grey29",  vjust=-0.8) +
  theme_bw() 

# ggsave("trial.png", width = 11.5, height = 8.5)

enter image description here

Я могу изменить интервал для первой группы легенд, связанных с размером, используя size опция в guides. Однако для второй группы, которая указывает цвет, я не могу ни приблизить всю группу к графику, ни уменьшить размер между цветными кругами.

Я также попробовал опции легенды в теме, такие как legend.spacing.x/y и legend.key.width/height. Эти параметры работали только для первой группы легенд.

Есть ли способ уменьшить размеры клавиш разных цветов? Изменение размеров клавиш также было бы полезно.

Чтобы сделать мой запрос более понятным, вот пробелы, которые я хочу исправить: enter image description here

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 19 июля 2019

Интервал между легендами всегда является проблемой и получает много голосов например. здесь . Я думаю, что одной из проблем в вашем конкретном примере может быть непрерывный характер gear. Факторизация может помочь (если у вас больше значений, чем gear, вместо этого используйте cut()), а затем измените расстояние между легендами в вашем вызове guides, используя unit(). Я немного свел ваш код и также заменил title = '' на title = NULL, так как в противном случае ggplot на самом деле рисует пустой объект.

library(tidyverse)

mtcars_f <- mtcars %>% mutate(gear_f = factor(gear)) #factorising gear

ggplot(mtcars_f, aes(disp, mpg)) + 
  geom_point(aes(color = gear_f), size = 10) + 
  geom_line(aes(size = disp/mpg*100)) +
  guides(size = guide_legend(title = NULL, order = 1, 
         keyheight = unit(0.1, 'inch')), 
         color = guide_legend(title = NULL, order = 2, 
         keyheight = unit(0.1, 'inch'))) +
  scale_color_brewer(palette = 'Blues') +
  theme(legend.key= element_blank())

Создан в 2019-07-19 пакетом Представление (v0.3.0)

0 голосов
/ 09 июля 2019

Я не совсем уверен, что вам нужно, но я думаю, вы хотите, чтобы точки в легенде были меньше.В этом случае override.aes() - это нужная вам функция.

Если ваш вопрос отличается, пожалуйста, уточните, чтобы мы могли вам помочь.

library(ggplot2)

ggplot() + 
  geom_point(data = mtcars, aes(x = disp, y = mpg, color = gear), 
             pch =20, size=18) + 
  geom_line(data = mtcars, aes(x = disp, y = mpg, size = disp/mpg*100)) +
  scale_size(range = c(0,3.5)) +
  guides(size = guide_legend("", order = 1, keywidth = 2, keyheight = 1.5), 
         color = guide_legend("", order = 2, keywidth = 1, keyheight = 1, 
                              override.aes = list(size=9))) +
  labs(x = "disp", y = "mpg") +
  geom_text(size=2.7, color = "grey29",  vjust=-0.8) +
  theme_bw()

Создано в 2019-07-08 пакетом представительство (v0.3.0)

...