2015-09-26 8 views
6

Ich zeichne zwei Datensätze mit ggplot. Einer sollte eine Linie sein, der andere sollte Punkte sein. Ich kann diese Arbeit erhalten, wie unten:ggplot2 - Graph mit Linien und Punkten für zwei Datensätze Legendenprobleme

d1 <- filter(d, variable==lineVar) 
d2 <- filter(d, variable==dotVar) 
g <- ggplot(d1, aes(clarity, x=xv, y=yv)) 
g <- g + geom_line(aes(colour=variable)) 
g <- g + ggtitle(title) 
g <- g + xlab(xl) 
g <- g + ylab(yl) 
g <- g + geom_point(data=d2, size=4, aes(colour=variable)) 

Output of ggplot2

Die einzige Frage, die Legende! Wie Sie sehen können, hat der "beobachtete" Datensatz eine Linie + Punkt in der Legende, wenn es wirklich nur ein Punkt sein sollte. Und umgekehrt für "vorhergesagt" sollte es nur eine Linie sein.

Gibt es eine Möglichkeit, eine sauberere/genauere Legende zu erhalten?

Antwort

5

Sie können die Legende ändern, ohne die Darstellung zu ändern, indem Sie override.aes verwenden. Sie haben keine Beispieldaten bereitgestellt. Daher habe ich den integrierten Datenrahmen mtcars zur Veranschaulichung verwendet. Die Schlüsselzeile des Codes beginnt mit guides. shape=c(16,NA) entfernt eine der Punktmarkierungen der Legende, indem sie ihre Farbe auf NA setzt. linetype=c(0,1) entfernt die Linie der anderen Legende, indem sie ihren Linientyp auf 0 setzt. Außerdem müssen Sie das Diagramm nach jeder Codezeile nicht speichern. Fügen Sie einfach zu jeder Zeile eine + hinzu und zeichnen Sie sie alle in einer einzigen Anweisung zusammen, wie im folgenden Beispiel.

library(reshape2) 
library(ggplot2) 

mtcars$mpg.line = mtcars$mpg 
mtcars.m = melt(mtcars[,c("mpg","mpg.line","wt")], id.var="wt") 
mtcars.m$variable = factor(mtcars.m$variable) 

ggplot() + 
    geom_line(data=mtcars.m[mtcars.m$variable=="mpg.line",], 
      aes(wt, value, colour=variable), lwd=1) + 
    geom_point(data=mtcars.m[mtcars.m$variable=="mpg",], 
      aes(wt, value, colour=variable), size=3) + 
    guides(colour=guide_legend(override.aes=list(shape=c(16,NA), linetype=c(0,1)))) + 
    theme_grey(base_size=15) 

enter image description here

Verwandte Themen