2016-08-02 7 views
0

Eine sehr einfache Frage, die ich denke, aber ich konnte keine Antwort darauf finden.Einzigartige Legende für zwei verschiedene Ästhetik mit ggplot2

Lassen Sie uns einen Beispieldatensatz mit 4 Spalten zeichnen. Ich möchte zwei verschiedene Punkte auf der gleichen Handlung, also mit unterschiedlicher Ästhetik, auftragen und habe eine Kolumnenlegende, die sie in ihren jeweiligen Farben beschreibt.

library(ggplot2) 

set.seed(10) 
ex <- data.frame("a" = c(1:100), "b" = rnorm(100), 
       "c" = seq(50, 249, 2), "d" = rnorm(100)) 

plot_ex <- ggplot(ex, aes(a, b)) + 
    geom_point(colour = "dodgerblue", cex = 2) + 
    geom_point(aes(x = c, y = d), colour = "firebrick3", cex = 2) + 
    theme_classic() + 
    labs(x = "X axis", y = "Y axis") 

plot_ex 

Ich habe versucht, eine scale_color_manual Linie hinzuzufügen, aber ich es wahrscheinlich falsch codiert:

plot_ex + 
    scale_color_manual(values = c("dodgerblue", "firebrick3"), label = c("first", "second"), name = "") 

Antwort

0

ich ggplot glauben schafft nur eine Legende auf, was in den aes ist. So können Sie die Farbe in die Ästhetik jedes geom_point verschieben und dann im scale_colour_manual umbenennen.

plot_ex <- ggplot(ex) + 
    geom_point(aes(x = a, y = b,colour = "dodgerblue"),cex = 2) + 
    geom_point(aes(x = c, y = d,colour = "firebrick3"), cex = 2) + 
    theme_classic() + 
    labs(x = "X axis", y = "Y axis") 

plot_ex + 
    scale_colour_manual(values = c("dodgerblue", "firebrick3"), label = c("first", "second"), name = "") 
+0

Das funktioniert in der Tat, ich frage mich, ob sie eine andere Möglichkeit sind, um fortzufahren. Vielen Dank. –

+0

Das ist schlechte Praxis. Eine gute Übung besteht darin, Ihre Daten in ein langes Format zu schmelzen und einen einzelnen "geom_point" -Aufruf zu verwenden (ein Beispiel kann bei aosmiths vorgeschlagenem Duplikat gefunden werden). – Gregor

+0

Beachten Sie, dass in 'aes' die' color = 'als Datenwert und nicht als explizite Farbe interpretiert wird. Du könntest genauso gut 'color =" dodgerblue "' durch 'color = 'first' oder' color = 'blah' ersetzen. – Gregor