2017-07-18 1 views
2

Wenn ich die Beispieldaten haben und zeichnen Sie es ggplot2 geom_segment mit:Wie bestimmte Farbe einer Gruppe von Segmenten? R ggplot2

library(ggplot2) 
df1 <- data.frame(p=c(1,2), f=c("A","B")) 
df2 <- data.frame(p=c(3,4), f=c("C","D")) 
ggplot() + 
geom_segment(data=df1, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) + 
geom_segment(data=df2, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) 

das Ergebnis Figur sein wird: enter image description here

ich nicht, warum die zwei separate geom_segment() Schichten Aktie verstehen die gleiche Legende? Was ist die Logik hinter diesem Verhalten?

Wie kann ich die Farbe der Linie "A" und der Linie "B" manuell einstellen? Ich habe versucht, sie mit dem folgenden Befehl zu ändern:

Nachricht
ggplot() + 
geom_segment(data=df1, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) + 
scale_color_manual(values=c("A"="red", "B"="blue")) + 
geom_segment(data=df2, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) 

aber der Fehler wird angezeigt:

Error: Insufficient values in manual scale. 4 needed but only 2 provided.

Danke Ihnen sehr

+1

'Farbe' ist eine einzelne Ästhetik und wird pro duce nur eine Legende, auch wenn du 'color' als ästhetisches Mapping in mehreren Geoms verwendest. "scale_color_manual" benötigt eine Anzahl von Farben, die der Anzahl der eindeutigen Werte für alle Variablen entspricht, die der Farbästhetik zugeordnet sind (in diesem Fall vier). Die Standardfarben für vier Werte sind 'hcl (seq (15,375, length = 5) [1: 4], 100, 65)' oder im Allgemeinen, wenn n verschiedene Ebenen der Variablen sind, die der Farbe 'hcl zugeordnet sind (seq (15.375, Länge = n + 1) [1: n], 100, 65) '.. – eipi10

+0

Aha, Danke eipi10. Ich kann verstehen, warum sie jetzt die gleiche Legende teilen. –

+0

Verwendet ggplot2 intern diese Funktion "hcl (seq (15,375, length = n + 1) [1: n], 100, 65)", um die Farbästhetik zu extrahieren? Soweit ich sehen kann, wenn ich nur eine Farbe von ihnen ändern möchte, sollte ich es mit anderen gewünschten Wert ersetzen. –

Antwort

0

Sie manuell die Farbe aller Segmente festlegen können durch using scale_color_manual:

ggplot() + geom_segment(data = df1,mapping = aes(x=p-0.5,xend = p + 0.5, y = 1,yend = 1, color=f)) + 
    geom_segment(data = df2,mapping = aes(x=p-0.5,xend = p + 0.5, y = 1,yend = 1,color = f))+ 
    scale_color_manual(values=c("B"="blue", "A"="green", "D"="red","C"="yellow")) 
Verwandte Themen