Применить метку легенды для заливки и раскрашивания в ggplot

#r #ggplot2 #dplyr #tidyverse

#r #ggplot2 #dplyr #tidyverse

Вопрос:

Я создаю несколько графиков, на которых для одного и того же ряда данных я создаю, например, линейный график и ленточный график. Затем я вручную назначаю метки, чтобы легенда выглядела красиво. Есть ли способ избежать многократного ввода меток, как показано ниже, а просто сделать это один раз и применить его ко всем масштабам?

 library(tidyverse)
starwars %>% 
  ggplot(aes(x=mass, y=height, color=gender, fill=gender))  
  geom_line()  
  geom_point()  
  scale_color_brewer(labels=c("Female", "Male"))  
  scale_fill_brewer(labels=c("Female", "Male"))
 

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

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

1. Измените данные так, чтобы значения gender столбца были женскими и мужскими

Ответ №1:

 library(tidyverse)
starwars %>% filter(mass > 1000)
  mutate(gender = case_when(
    gender == "masculine" ~ "Male",
    gender == "feminine"  ~ "Female",
    TRUE ~ "Other")) %>%
  ggplot(aes(x=mass, y=height, color=gender, group = gender, fill=gender))  
  geom_line()  
  geom_point()  
  scale_x_log10() # Because Jabba is an absolute unit
 

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

Ответ №2:

Или создайте именованный вектор. Недостаток в том, чтобы сохранить «другое» как NA (хотя в противном случае в этом случае есть только NA).

Я не масштабировал для Jabba.

 library(tidyverse)

mylabels <- c(feminine = "Female", masculine = "Male")
starwars %>% 
  ggplot(aes(x=mass, y=height, color=gender, fill=gender))  
  geom_line()  
  geom_point()  
  scale_color_brewer(labels=mylabels)  
  scale_fill_brewer(labels=mylabels)
#> Warning: Removed 29 row(s) containing missing values (geom_path).
#> Warning: Removed 29 rows containing missing values (geom_point).
 

Создано 2021-02-09 пакетом reprex (версия 0.3.0)