2017-05-08 22 views
0

我已經在R中映射了顏色。但有些東西不是點擊。 理想情況下,我想將顏色名稱映射到變量值「student」,但是我得到一個長度錯誤。但是,映射到顏色的學生數量是相等的。此外,我試過創建兩個單獨的顏色列 - 作爲一個字符串和一個ID。顏色最終會在圖例上標記。添加手動縮放顏色選項沒有太大的作用。如何在R中融化顏色映射

這裏是數據的一個示例:

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") 

然後用作圖: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()

的例子是比實際數據小得多。 理想情況下,我想能夠使用類似於: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"))

並調用顏色。我不確定發生了什麼。它可能看起來好像我試圖將12種顏色映射到14個值,但我也嘗試過14種。

回答

1

首先給這個學生分配顏色,aes(color = student),然後用scale_color_manual()代替。既然你已經命名的顏色向量,ggplot將處理基於名稱匹配,除非名字是不是在調色板則該值將被丟棄,而不是畫在:

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) 

現在看起來像這樣: enter image description here