2014-06-30 15 views
6

Ho il seguente diagramma:Come aggiungere manualmente una legenda a ggplot? - R

Plot

Il codice che ho usato per generare questa trama era:

ggplot(df, aes(x = instance, y = total_hits))+ 
geom_point(size = 1)+ 
geom_line()+ 
geom_line(aes(x=df$instance, y = line1), colour="red")+ 
geom_vline(xintercept=805) + 
geom_line(aes(x=df$instance, y = line2), colour="blue")+ 
geom_line(aes(x=df$instance, y = line3), colour="purple") 

Vorrei aggiungere una legenda a questa trama, a etichettare ogni linea. Tuttavia, poiché ho aggiunto ciascuna riga manualmente, non sono sicuro di come aggiungere la legenda. Qualche consiglio/consiglio?

  • Non riesco a condividere i dati che sto utilizzando, quindi sto solo cercando un modo generale per aggiungere manualmente le legende.
+1

Dato che non è possibile condividere la trama, è possibile rendere riproducibile l'esempio mediante (a) utilizzando un set di dati incorporato o (b) simulando un piccolo esempio illustrativo? Salva tutti quelli che potrebbero provare a rispondere alla tua domanda di dover fare da soli e mettere tutti sulla stessa pagina. – Gregor

risposta

19

ggplot piace davvero solo a disegnare leggende per le cose che hanno mappature estetici. Se si impostano i "nomi in codice" per i colori, è possibile definirli in una scala manuale per tale attributo. Per esempio

ggplot(df, aes(x = instance, y = total_hits))+geom_point(size = 1)+geom_line()+ 
geom_line(aes(x=instance, y = line1, colour="myline1")) + 
geom_vline(xintercept=805)+geom_line(aes(x=df$instance, y = line2, colour="myline2"))+ 
geom_line(aes(x=instance, y = line3, colour="myline3")) + 
scale_colour_manual(name="Line Color", 
    values=c(myline1="red", myline2="blue", myline3="purple")) 

dovrebbe funzionare (non testata in quanto non ha fornito alcun dato a tutti). Ogni volta che fai una domanda, è solo educato includere uno reproducible example in modo che il rispondente non debba fare tutto il lavoro per testare.

+1

punto saliente essere: sposta quella istruzione 'color =" red "' al di fuori delle parentesi 'aes()' all'interno di esse per ogni geom. –

+0

@BrianD Sbagliato, in primo luogo, non c'è alcuna istruzione 'color =" red "' nell'esempio, in secondo luogo, se si intende 'color =" myline1 "', dovrebbe essere all'interno di 'aes()'. – Meow

+0

@meow Il mio commento si riferiva all'esempio di OP. Sono d'accordo con la risposta di cui sopra. E sì, le dichiarazioni color = dovrebbero essere all'interno di aes(). –

Problemi correlati