Как отобразить цвет в двух частях легенды ggplot?

#r #ggplot2

#r #ggplot2

Вопрос:

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

Что я изо всех сил пытаюсь сделать, так это создать легенду, в которой отображаются имена групп и цвета, а также имена отдельных серий и сочетание ширины / цвета для каждого.

Чтобы привести минимальный рабочий пример:

 # Create data
names <- c("A", "B", "C", "D", "E", "F")

df <- data.frame(
  name = rep(names, 3),
  group = rep(c(rep("X", 2), rep("Y", 2), rep("Z", 2)), 3),
  x = c(rep(1, 6), rep(2, 6), rep(3, 6)),
  y = c(runif(6, 0, 1), runif(6, 1, 2), runif(6, 2, 3)),
  stringsAsFactors=FALSE
)


line.widths <- setName(runif(6, 0, 3), names)
group.colors <- setNames(c("#AA0000", "#00AA00", "#0000AA"), c("X", "Y", "Z"))
name.colors <- setNames(c(rep("#AA0000", 2), rep("#00AA00", 2), rep("#0000AA", 2)),
                        names)
  

И теперь график:

 library(ggplot2)

# Names and groups separately
ggplot(df, aes_string(x="x", y="y", group="name"))  
  geom_line(aes(size=name, color=group))  
  scale_size_manual(values=line.widths)   
  scale_color_manual(values=group.colors)
  

Шесть строк с тремя разными цветами и тремя разными размерами строк.

Мой вопрос заключается в том, можно ли добавить цвета группы к name части легенды, не теряя group часть.

Спасибо!

Ответ №1:

Вы невероятно близки (и спасибо за хорошо проработанный и заданный вопрос). Вам просто нужно добавить override.aes в легенду, вот так:

 ggplot(df, aes_string(x="x", y="y", group="name"))  
  geom_line(aes(size=name, color=group))  
  scale_size_manual(values=line.widths)   
  scale_color_manual(values=group.colors)  
  guides(size = guide_legend(override.aes = list(col = name.colors)))
  

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

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

1. Спасибо! У меня было ощущение, что используемый ответ override.aes , но я все еще не совсем понял guide , guide_legend и override.aes .