ggplot — два блока условных обозначений?

#r #ggplot2

#r #ggplot2

Вопрос:

Этот код:

 mtcars %>% 
  group_by(carb, gear, am) %>% 
  summarise(mpg = mean(mpg)) %>% 
  ggplot(aes(x = carb, y = mpg, color = as.factor(gear), linetype = as.factor(am), group = interaction(gear, am))) 
  geom_line() 
  geom_point() 
  theme(legend.box.background = element_rect(color = "black", size = 1))
 

Выдает следующее изображение:

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

Тем не менее, я бы хотел, чтобы легенда о цвете и легенда о типе линии были в отдельных полях условных обозначений. Я сделал желаемый результат в Paint, и мне интересно, как добиться этого с помощью ggplot:

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

Комментарии:

1. Попробуйте legend.background . Это дает вам поля вокруг каждой легенды, но размер поля зависит от содержимого, например, длины заголовка легенды и меток ключей

Ответ №1:

Отдельные блоки условных обозначений могут быть достигнуты с помощью legend.background вместо legend.background.box . Это дает вам поля вокруг каждой легенды, но размер поля зависит от содержимого, например, длины заголовка легенды и меток ключей. Чтобы получить поля одинаковой ширины, вы можете добавить несколько пробелов в заголовок легенды, например stringr::str_pad , чтобы получить заголовки одинаковой ширины. Попробуйте это:

 library(ggplot2)
library(dplyr)

mtcars %>% 
  group_by(carb, gear, am) %>% 
  summarise(mpg = mean(mpg)) %>% 
  ggplot(aes(x = carb, y = mpg, color = as.factor(gear), linetype = as.factor(am), group = interaction(gear, am))) 
  geom_line() 
  geom_point() 
  labs(linetype = stringr::str_pad("as.factor(am)", 15), color = stringr::str_pad("as.factor(gear)", 15))  
  theme(legend.background = element_rect(color = "black", size = 1))
#> `summarise()` regrouping output by 'carb', 'gear' (override with `.groups` argument)