2013-08-05 17 views
22

Mam działkę w ggplot z 4 oddzielnymi liniami, które dodałem z oddzielnym argumentem geom_line(). Chciałbym dodać legendę, ale scale_colour_manual nie działa w tym przypadku. Jaki jest właściwy sposób dodawania legend po dodaniu zmiennych osobno?Dodawanie legendy do ggplot, gdy linie zostały dodane ręcznie

Oto mój kod:

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

Czy możesz opublikować swój kod? Ustawienie 'color =" Line Name "' w wywołaniu 'aes' powinno działać. – Peyton

+0

Mam już argument w kolorze, ale nie wyświetla go jako legendy. Wysłałem swój kod. – user1723765

+3

Umieść argument 'color' wewnątrz' aes', a zamiast ustawić go na nazwę koloru, ustaw go na nazwę, która ma się pojawić w legendzie. Następnie użyj 'scale_color_manual', aby odwzorować tę nazwę na żądany kolor. – Peyton

Odpowiedz

21

Wystarczy ustawić nazwę koloru w aes aby cokolwiek nazwa linia jest na legendzie powinno być.

nie mam danych, ale oto przykład stosując iris linii z losowymi wartościami Y:

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

Kluczową sprawą jest, aby pamiętać, że podczas tworzenia estetyczne mapowanie, ale zamiast odwzorowywać kolor na kolumnę w ramce danych, mapujesz ją na określony przez ciebie ciąg znaków. ggplot przypisze kolor do tej wartości, tak jak w przypadku wartości pochodzących z ramki danych. Mogłeś wyprodukował sam wykres jak wyżej dodając kolumnę Species do ramki danych:

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

Tak czy inaczej, jeśli nie lubisz kolor ggplot2 przypisuje, wówczas można określić własne przy użyciu 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

Innym rozwiązaniem jest po prostu bezpośrednio oznaczyć linii, lub do celu z linii jest to oczywiste z kontekstu. Naprawdę najlepsza opcja zależy od konkretnych okoliczności.

+2

działa to dla pierwszej zmiennej, która jest w pierwszym argumencie aes() w powyższym kodzie, ale dla dodatkowej geom_line() s – user1723765

+0

Czy to nie działa? kod i dane zarówno - w zasadzie przykład, który mogę uruchomić, aby zobaczyć, gdzie jesteś? – Peyton

Powiązane problemy