Добавить легенду в график geom_line() в r

Я пытаюсь добавить легенду к своему ggplot, но потерпел неудачу. Я попробовал функцию scale_colour_manual(), но легенда не отображается.

ggplot()+
geom_line(data=Summary,aes(y=Y1,x= X),colour="darkblue",size=1 )+
geom_line(data=Summary,aes(y=Y2,x= X),colour="red",size=1  )

Моя сводка данных "Summary" выглядит следующим образом:

  X           Y1           Y2
139 1.465477e+16 7.173075e+15
277 1.044803e+16 9.275002e+15
415 1.059258e+16 8.562518e+15
553 1.033283e+16 8.268984e+15
691 9.548019e+15 1.022248e+16
830 1.008212e+16 8.641891e+15
968 9.822061e+15 9.315856e+15
1106 9.948143e+15 9.178694e+15
1244 1.013922e+16 8.825904e+15
1382 9.815094e+15 9.283662e+15

Пожалуйста, сообщите мне, как построить Y1, Y2 против X на одном и том же графике и добавить легенду на стороне.

Ответ 1

ggplot требуется aes, чтобы сделать легенду, перемещение colour внутри aes(...) приведет к созданию легенды автоматически. то мы можем отрегулировать метки легенды с помощью scale_color_discrete:

ggplot()+
    geom_line(data=Summary,aes(y=Y1,x= X,colour="darkblue"),size=1 )+
    geom_line(data=Summary,aes(y=Y2,x= X,colour="red"),size=1) +
    scale_color_discrete(name = "Y series", labels = c("Y2", "Y1"))

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

Ответ 2

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

ggplot(data=Summary)+
  geom_line(mapping=aes(y=Y1,x= X,color="Y1"),size=1 ) +
  geom_line(mapping=aes(y=Y2,x= X,color="Y2"),size=1) +
  scale_color_manual(values = c(
    'Y1' = 'darkblue',
    'Y2' = 'red')) +
  labs(color = 'Y series')

Ответ 3

Чтобы предоставить более компактный ответ, который использует только один вызов geom:

ggplot2 действительно любит длинные данные (пары ключ-значение) лучше, чем широкие (много столбцов). Это требует, чтобы вы преобразовали свои данные перед нанесением их на график, используя пакет типа tidyr или reshape2. Таким образом, вы можете иметь переменную, обозначающую цвет, внутри вашего вызова aes, которая создаст легенду.

Для ваших данных:

library(tidyr)
library(ggplot2)

plot_data <- gather(data, variable, value, -x)

ggplot(plot_data, aes(x = x, y = value, color = variable)) +
  geom_line() +
  scale_color_manual(values = c("firebrick", "dodgerblue")) 

Затем вы можете настроить легенду с помощью помощников scale_color.