2013-08-05 5 views
22

У меня есть график в ggplot с 4 отдельными строками, которые я добавил с помощью отдельного аргумента geom_line(). Я хотел бы добавить легенду, но scale_colour_manual не работает в этом случае. Каков правильный способ добавления легенд, когда я добавлял переменные отдельно?Добавление легенды в ggplot при добавлении строк вручную

Вот мой код:

ggplot(proba[108:140,], aes(c,four)) + 
    geom_line(linetype=1, size=0.3) + 
    scale_x_continuous(breaks=seq(110,140,5)) + 
    theme_bw() + 
    theme(axis.line = element_line(colour = "black", size=0.25), 
      panel.grid.major = element_blank(), 
      panel.grid.minor = element_blank(), 
      panel.border = element_blank(), 
      panel.background = element_blank()) + 
    theme(axis.text.x = element_text(angle = 0, hjust = +0.5, size=6,color="black")) + 
    theme(axis.text.y = element_text(angle = 0, hjust = -100, size=6, color="black")) + 
    theme(axis.ticks=element_line(colour="black",size=0.25)) + 
    xlab("\nTime-steps") + 
    ylab("Proportion correct\n") + 
    theme(axis.text=element_text(size=8),axis.title=element_text(size=8)) + 
    geom_line(aes(c,three), size=0.2, linetype=2) + 
    geom_line(aes(c,one),linetype=3, size=0.8, colour="darkgrey") + 
    geom_line(aes(c,two), linetype=1, size=0.8, colour="darkgrey") 
+0

Можете ли вы разместить свой код? Установка 'color =" Название строки "' в вызове 'aes' должна работать. – Peyton

+0

У меня уже есть аргумент в цвете, но он не отображает его как легенду. Я отправил свой код. – user1723765

+3

Поместите аргумент 'color' внутри' aes' и вместо того, чтобы устанавливать его в имя цвета, установите его в имя, которое вы хотите отобразить в легенде. Затем используйте 'scale_color_manual', чтобы сопоставить это имя с желаемым цветом. – Peyton

ответ

21

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

У меня нет данных, но вот пример использования iris линию со случайными значениями у:

library(ggplot2) 

line.data <- data.frame(x=seq(0, 10, length.out=10), y=runif(10, 0, 10)) 

qplot(Sepal.Length, Petal.Length, color=Species, data=iris) + 
    geom_line(aes(x, y, color="My Line"), data=line.data) 

enter image description here

Главное, чтобы отметить, что вы создаете эстетичный сопоставление, но вместо того, чтобы отображать цвет в столбец в кадре данных, вы сопоставляете его с указанной вами строкой. ggplot присвоит цвет этому значению, так же как и значения, которые поступают из фрейма данных. Вы могли произвести тот же сюжет, что и выше, добавив Species столбец в кадре данных:

line.data$Species <- "My Line" 
qplot(Sepal.Length, Petal.Length, color=Species, data=iris) + 
    geom_line(aes(x, y), data=line.data) 

В любом случае, если вы не любите цвет ggplot2 правопреемников, то вы можете указать свой собственный, используя scale_color_manual:

qplot(Sepal.Length, Petal.Length, color=Species, data=iris) + 
    geom_line(aes(x, y, color="My Line"), data=line.data) + 
    scale_color_manual(values=c("setosa"="blue4", "versicolor"="red4", 
           "virginica"="purple4", "My Line"="gray")) 

enter image description here

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

+2

это работает для первой переменной, которая находится в первом аргументе aes() в приведенном выше коде, но для дополнительного geom_line() s – user1723765

+0

Разве это не работает для вас? код и данные - в основном пример, который я могу запустить, чтобы увидеть, где вы находитесь? – Peyton

Смежные вопросы