2016-04-05 2 views
1

Ich habe ein Diagramm von Linien mit Farben von schwarz bis grün. Allerdings möchte ich die Linien allmählich um ihren y-Wert bei "Value2" auf der x-Achse färben. Die Zeile mit dem höchsten y-Wert bei "Value2" sollte grün sein, die mit dem niedrigsten y-Wert bei "Value2" sollte schwarz sein.ggplot: weisen Sie die Farbe der Linien nach ihrem Wert an einem bestimmten Punkt der x-Achse zu

Wie kann ich die Farbe den Linien durch ihre y-Werte an einem bestimmten Punkt der x-Achse zuweisen?

Mein Code:

library(ggplot2) 

x <- structure(list(ID = c("1998-06-05_area2", "1999-07-11_area2", 
"1998-05-13_area1", "1998-05-20_area1", "1998-06-05_area2", "1999-07-11_area2", 
"1998-05-13_area1", "1998-05-20_area1", "1998-06-05_area2", "1999-07-11_area2", 
"1998-05-13_area1", "1998-05-20_area1"), variable = structure(c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("Value1", 
"Value2", "Value3"), class = "factor"), value = c(322, 280, 210, 
416, 384, 252, 329, 601, 83, 66, 100, 147)), .Names = c("ID", 
"variable", "value"), na.action = structure(c(1L, 2L, 3L, 4L, 
13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 25L, 26L, 27L, 28L), .Names = c("1", 
"2", "3", "4", "13", "14", "15", "16", "17", "18", "19", "20", 
"25", "26", "27", "28"), class = "omit"), row.names = c(5L, 6L, 
7L, 8L, 9L, 10L, 11L, 12L, 21L, 22L, 23L, 24L), class = "data.frame") 

pal <- colorRampPalette(c("black","green")) 
colorlist <- pal(length(unique(x$ID))) 

ggplot(data = x , aes(x = variable, y = value, color = ID)) + 
    geom_line(aes(group =ID),size=1) + geom_point(size = 2) + 
    scale_colour_manual(values=colorlist) 

Antwort

3

Wir können dplyr verwenden, um eine zusätzliche Spalte in Ihren Daten für die entsprechende Farbzuordnung zu erstellen und damit Rohr in den ggplot() Aufruf um den Plot zu erzeugen.

library(dplyr) 
library(ggplot2) 
x %>% group_by(ID) %>% 
    mutate(col = value[variable == "Value2"]) %>% # Add column to map colours 
    ggplot(aes(x = variable, y = value, color = factor(col))) + 
    geom_line(aes(group =ID),size=1) + geom_point(size = 2) + 
    scale_colour_manual(values=colorlist) 

enter image description here

Verwandte Themen