2017-05-08 1 views
0

Ich habe Farben in R zuvor zugeordnet. Aber etwas klickt nicht. Im Idealfall möchte ich Farbnamen dem Variablenwert "Student" zuordnen, bekomme aber einen Längenfehler. Die Anzahl der Schüler, die den Farben zugeordnet werden, ist jedoch gleich. Außerdem habe ich versucht, zwei separate Farbspalten zu erstellen - als String und als ID. Die Farben werden dann in der Legende beschriftet. Das Hinzufügen der manuellen Skalierungsoptionen bringt nicht viel. HierWie colormap aus Schmelze in R

ist eine Probe der Daten:

m3 <- structure(list(student = structure(c(7L, 11L, 9L, 2L, 8L, 4L), .Label = c("a","b", "c", "d", "e", "f", "g","h", "i", "j", "k", "l", "m", "n","o", "p"), class = "factor"), colorz = structure(4:9, .Label = c("#66CC99","#9999CC", "#CC6666", "#FF0000FF", "#FF2000FF", "#FF4000FF","#FF6000FF", "#FF8000FF", "#FF9F00FF", "#FFBF00FF", "#FFDF00FF","#FFFF00FF", "green", "red"), class = "factor"), variable = structure(c(1L,1L, 1L, 1L, 1L, 1L), .Label = c("pre", "c1", "c2","b1", "c3", "c4", "b2", "u1", "u2","u3", "u4", "total"), class = "factor"), value = c(3, 31,49, 88, 31, 40), col = c("#FF0000FF", "#FF2000FF", "#FF4000FF","#FF6000FF", "#FF8000FF", "#FF9F00FF")), .Names = c("student","colorz", "variable", "value", "col"), row.names = c(NA, 6L), class = "data.frame") 

Und dann die grafische Darstellung mit: ggplot(m3, aes(x=variable, y=value, group=student,linetype=student)) + geom_line(size=.75) + geom_point(size=2) + xlab("test") + ylab(paste("score")) + geom_hline(yintercept=70, linetype="dashed", size=3) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + scale_color_identity()

Das Beispiel ist viel kleiner als die tatsächlichen Daten. Idealerweise würde ich gerne in der Lage sein, etwas zu verwenden wie: color.names <- setNames(c("#FF0000FF", "#FF2000FF", "#FF4000FF", "#FF6000FF", "#FF8000FF", "#FF9F00FF","#CC6666", "#9999CC", "#66CC99", "#FFBF00FF", "#FFDF00FF", "#FFFF00FF","green","red"), c("a","b","c", "d","e","f","g","h","i","j","k","l","m","n"))

und rufen Sie die Farben. Ich bin mir nicht sicher, was alles verkehrt ist. Es könnte so aussehen, als würde ich versuchen, 12 Farben auf 14 Werte zu mappen, aber ich habe auch 14 versucht.

Antwort

1

Ordnen Sie zuerst dem Schüler die Farbe aes(color = student) zu, und verwenden Sie stattdessen einfach scale_color_manual(). Da Sie bereits Ihre Farbvektor genannt wird ggplot die passende basieren auf Namen behandeln, es sei denn, ein Name nicht in der Palette ist, dann wird dieser Wert gelöscht werden und nicht aufgetragen:

ggplot(m3, aes(x=variable, y=value, group=student, linetype=student, color = student)) + 
    geom_line(size=.75) + geom_point(size=2) + xlab("test") + 
    ylab(paste("score")) + geom_hline(yintercept=70, linetype="dashed", size=3) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) + 
    scale_color_manual(values = color.names) 

wie folgt aussieht jetzt: enter image description here