2013-08-05 11 views
22

Ho un grafico in ggplot con 4 righe separate che ho aggiunto con un argomento geom_line() separato. Vorrei aggiungere una legenda, ma in questo caso scale_colour_manual non funziona. Qual è il modo corretto di aggiungere legende quando ho aggiunto le variabili separatamente?Aggiunta di una legenda a ggplot quando le righe sono state aggiunte manualmente

Ecco il mio codice:

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

Puoi pubblicare il tuo codice? L'impostazione di 'color =" Line Name "' nella chiamata a 'aes' dovrebbe funzionare. – Peyton

+0

Ho già un argomento a colori ma non lo visualizza come una legenda. Ho pubblicato il mio codice. – user1723765

+3

Metti l'argomento 'color' dentro' aes', e invece di impostarlo sul nome del colore, impostalo sul nome che vuoi che appaia nella legenda. Quindi usa 'scale_color_manual' per mappare quel nome sul colore desiderato. – Peyton

risposta

21

Basta impostare il nome del colore in aes per qualunque sia il nome della linea sulla leggenda dovrebbe essere.

Non ho i dati, ma ecco un esempio utilizzando iris una linea con i valori y casuali:

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

La cosa fondamentale da notare è che si sta creando un'estetica mappatura, ma invece di mappare il colore a una colonna in un frame di dati, lo stai mappando a una stringa specificata. ggplot assegnerà un colore a quel valore, proprio come con i valori che provengono da un frame di dati. Si potrebbe avere prodotto la stessa trama di cui sopra con l'aggiunta di una colonna Species al telaio di dati:

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

In entrambi i casi, se non ti piace il colore ggplot2 cessionari, allora è possibile specificare il proprio utilizzando 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

Un'altra alternativa è di appena etichettare direttamente le linee, o per rendere lo scopo delle linee evidenti dal contesto. In realtà, l'opzione migliore dipende dalle circostanze specifiche.

+2

funziona per la prima variabile presente nel primo argomento aes() nel codice precedente, ma per l'ulteriore geom_line() s – user1723765

+0

Non funziona per te? codice e dati entrambi - fondamentalmente un esempio che posso correre per vedere dove sei? – Peyton

Problemi correlati