2016-11-14 2 views
0

Ich habe einen Datenrahmen mit zwei verschiedenen Variablen y1 und y2 zu bauen: Ich plotten mag beide mit geom_line, mit zwei verschiedenen Linientypen (color ist bereits vergeben durch eine andere Variable). Ich interessiere mich nicht für Lösungen mit melt oder gather: Ich habe gute Gründe, das nicht mit meinen echten Daten zu tun. Stattdessen versuche ich meine Legende von Hand zu bauen:Fehler beim Linientyp Legende manuell in ggplot

library(ggplot2) 

x <- rep(seq(0, 1, len = 10), times = 3) 
group <- gl(n = 3, k = 10, labels = c("A", "B", "C")) 
foo <- data.frame(x = x, y1 = x^2, y2 = x^3, group = group) 


p <- ggplot(data = foo, aes(x = x, color = group)) + 
    geom_line(data = foo, aes(y = y1), linetype = "type1") + 
    geom_line(data = foo, aes(y = y2), linetype = "type2") + 
    guides(color = FALSE) + 
    scale_linetype_manual(name = "variable", 
          values = c("type1" = "solid", "type2" = "dashed"), 
          labels = c("y1", "y2")) + 
    facet_wrap(~ group) 
p 

ist jedoch ggplot mir einen seltsamen Fehler geben:

> Error in grid.Call.graphics(L_lines, x$x, x$y, index, x$arrow) : 
    invalid line type: must be length 2, 4, 6 or 8 

Was geschieht? Kannst du mir helfen?

Antwort

1

Sie haben linetype in Ihrer aes Funktion verwenden:

ggplot(data = foo, aes(x = x), color = group) + 
    geom_line(data = foo, aes(y = y1, linetype = "type1")) + 
    geom_line(data = foo, aes(y = y2, linetype = "type2")) + 
    guides(color = FALSE) + 
    scale_linetype_manual(name = "variable", 
         values = c("type1" = "solid", "type2" = "dashed"), 
         labels = c("y1", "y2")) + 
    facet_wrap(~ group) 

enter image description here

+0

Great! Kannst du auch den Grund erklären, warum 'Linientype' in' Aes' gehen muss? Ich dachte, dass 'aes' nur Datenrahmenvariablen auf die Ästhetik des aktuellen 'geom' (hier' geom_line') abbildet. Ich muss mich jedoch irren, weil "type1" und "type2" nicht Variablen im aktuellen Datenrahmen sind. – DeltaIV

+1

All die Dinge, die ich über ggplot2-Legenden weiß, stammen von http://www.cookbook-r.com/Graphs/ Legends_ (ggplot2) Und ich weiß, wie sie es benutzen .. aber warum das so sein muss: Entschuldigung, ich bin kein Experte für ggplot2 Ich kenne deine Antwort, weil ich vor ein paar Tagen die gleichen Probleme hatte. –

+1

@DeltaIV Wenn Sie eine Legende benötigen, benötigen Sie eine zugrunde liegende Zuordnung. 'aes' wird normalerweise verwendet, um Spalten eines dat.frame zuzuordnen, aber Sie können alles zuordnen (Transformationen der data.frame-Spalten, Vektoren in der übergeordneten Umgebung) , oder Variablen, die Sie in 'aes' erstellen. – Roland

Verwandte Themen