2016-11-24 8 views
0

das folgende Beispiel nehmen:ggplot2 - Steuerung Linientypen, wenn mehr als eine Zeile

library(ggplot2) 
dsamp <- diamonds[sample(nrow(diamonds), 1000), ] 

ggplot(dsamp, aes(x = x)) + 
    geom_line(aes(y = y, linetype = "Simple Model")) + 
    geom_line(aes(y = z, linetype = "Complex Model")) 

Welche diese Grafik erzeugt: enter image description here

Ok. Mein Problem ist, dass ich die Linientypen umgekehrt haben möchte. Ich möchte, dass das einfache Modell die durchgezogene Linie und das komplexe Modell gestrichelt hat. Standardmäßig scheint hier die alphabetische Reihenfolge den Linientyp zu bestimmen. Ich habe verschiedene Varianten mit scale_linetype_manual usw. ausprobiert, aber versuchen Sie, wie ich könnte, kann ich nicht die einfache Linie, um solide zu sein und den Komplex zu streichen und gleichzeitig die 'einfachen' & 'komplexe' Titel in der Legende zu halten. Bevor jemand es vorschlägt, versuche ich zu vermeiden, diese Daten so zu schmelzen/umzuformen, dass beide y-Variablen in 1 Spalte sind, weil die realen Daten mehr in der Handlung usw. haben und es wirklich komplex wäre.

Edit: Ok danke an Haboryme für seine Antwort. Ich habe die Quelle meiner Verwirrung gefunden.

Nehmen Sie die folgende Handlung:

ggplot(dsamp, aes(x = x)) + 
    geom_line(aes(y = y, linetype = "Simple Model"), size = 1.5) + 
    geom_line(aes(y = z, linetype = "Complex Model"), size = 1.5) + 
    scale_linetype_manual(values=c(5, 1)) 

Die Legende erscheint Linienart sowohl als durchgezogene Linien zu zeigen: enter image description here

Allerdings, wenn ich es ändern 3 Linientyp:

ggplot(dsamp, aes(x = x)) + 
    geom_line(aes(y = y, linetype = "Simple Model"), size = 1.5) + 
    geom_line(aes(y = z, linetype = "Complex Model"), size = 1.5) + 
    scale_linetype_manual(values = c(3, 1)) 

Die Linientyp Legende ist korrekt: enter image description here

Nun, ich denke, das löst mein Problem - ich werde einfach Linientyp 3 verwenden müssen. Es scheint, dass Linientyp 5 mit der Größe 1.5 einfach nicht in den Legendenraum passt.

+1

ich den gewünschten Ausgang mit '+ scale_linetype_manual (Werte = c (2,1))' – Haboryme

+0

oooo ok du hast recht. Ok, etwas Seltsames passiert in meinen echten Daten. Also verwende ich Linientyp 5, wo du 2 benutzt hast. In meinen realen Daten erscheint die Legende für Linientyp 5 als durchgezogene Linie anstatt gestrichelt. Wenn ich Linientyp 2 verwende, funktioniert es wie oben. Ok zurückblickend kommt es von etwas, das ich in Thema Wahlen getan habe Ich denke – user2498193

+1

Sie können Liniengröße nur in der Legende durch '+ Führer ändern (linetype = guide_legend (override.aes ​​= Liste (Größe = 0.5)))' – cuttlefish44

Antwort

1
ggplot(dsamp, aes(x=x)) + 
    geom_line(aes(y=y, linetype="Simple Model"),size=1.5) + 
    geom_line(aes(y=z, linetype="Complex Model"),size=1.5)+ 
    scale_linetype_manual(values=c(5,1)) 

Der obige Code gibt Ihnen ein Diagramm, in dem beide Zeilen in der Legende ähnlich aussehen.
Dies liegt daran, linetype=5 entspricht "longdash" (2 ist "gestrichelt"). Die Longdashes sind zu lang um in der Legende zu zeigen.

Wenn Sie möchten, die behalten size=1.5 (oder höher) mit dem longdashes und haben eine richtige Legende Sie müssen auch die Größe der Legende ändern, zum Beispiel mit:

+theme(legend.key.size=unit(2,"cm")) 
+0

Danke, Haboryme – user2498193

Verwandte Themen