2013-02-08 64 views
3

現在,我只是用這樣的:ggplot2中的「Bin」連續值基於標準以獲得更多不同的顏色(如因子級着色)?

test_data$level <- rep("", nrow(test_data)) 
test_data[test_data$value <= 1, ]$level <- "1" 
test_data[test_data$value > 1 & test_data$value <= 2, ]$level <- "2" 
... 
test_data[test_data$value > 4 & test_data$value <= 5, ]$level <- "5" 

只是不知道是否有更好的方法R中做到這一點,還是有辦法簡單地通過ggplot2應用一些scale參數做了歸類。


可能有一些方法來解決這個問題,所以很難對我的問題進行恰當的說明。這裏的要點......我有一些數據,像這樣:

set.seed(123) 
test_data <- data.frame(var1 = rep(LETTERS[1:3], each = 5), 
    var2 = rep(letters[1:5], 3), 
    value = runif(30, 1, 5)) 
test_data 
    var1 value 
1  A 2.150310 
2  B 4.153221 
3  C 2.635908 
4  D 4.532070 
5  E 4.761869 
6  F 1.182226 
7  G 3.112422 
8  H 4.569676 
9  I 3.205740 
10 J 2.826459 

我有更多的數據點,和我密謀是這樣的:

library(ggplot2) 
p <- ggplot(test_data, aes(x = var1, y = var2, colour = value)) 
p <- p + geom_jitter(position = position_jitter(width = 0.1, heigh = 0.1)) 
p 

其中給出類似這樣:

enter image description here

我的實際數據來自主觀評估,評分爲1-5分,但我將相似的問題集中在一起,並將它們平均,以便它們一致不再是整數。

我正在繪製每個因子組合的評分,以可視化哪些組合產生更高的評分。默認的連續縮放並不真正「彈出」,我想要獲得顏色比例以將這些值(0-1,1-2,... 4-5)的「元素」處理爲scale_colour_discrete確實是因素。

所以,我的問題(S):

1)是否有可能與GGPLOT2到「bin」的這些莫名其妙通過scale_colour_continuous這樣我就可以得到默認因子水平色彩方案適用即使這是連續的數據?

2)如果沒有,是否有一種更簡單的方法來創建一個新的向量,其中我根據標準將數值替換爲數字/字母?我是一個R新手,所以除了一堆if()或條件語句(test_data[test_data > 0 & test_data < 1, "values"] <- "a"或類似的東西)我不確定。

回答

5

最簡單的辦法是做

ggplot(transform(test_data, Discrete=cut(values, seq(0,5,1), include.lowest=T),... 

現在你data.frame將包括基於列values因素一欄,所以你可以在你的ggplot的情況下做aes(..., color=Discrete,...)。一旦完成繪圖,test_data的格式將被保留。

爲了保持離散列,當然,最好的選擇是:

test_data$Discrete <- cut(values, seq(0,5,1), include.lowest=T) 
+0

我不熟悉'transform'參數 - 很好知道。雖然更好的是瞭解'cut'命令!這正是我想要通過條件語句手動合併向量來拯救我的那種事情! – Hendy

2

您可以從顏色欄中傳說到discrete式的傳奇切換。

library(RColorBrewer) # for brewer.pal 
ggplot(test_data, aes(x = var1, y = var2, colour = value)) + 
    geom_jitter(position = position_jitter(width = 0.1, heigh = 0.1)) + 
    scale_colour_gradientn(guide = 'legend', colours = brewer.pal(n = 5, name = 'Set1')) 

enter image description here

+0

這應該是'scale_colour_gradient'還是那個'n'結尾故意? 1)如果有意,我得到一個錯誤「錯誤col2rgb(顏色):參數」顏色「丟失,沒有默認」與ggplot2 0.9.3。 2)如果不是故意的,我會通過傳遞'scale_colour_gradient(guide ='legend')'來獲得一個連續的色階,它看起來就像是默認的。 – Hendy

+0

我現在已經包含了一個顏色參數。 – mnel

1

從字面上看,我貼我目前的方法的更新,我想到了另一種方式來做到這一點?

p <- ggplot(test_data, aes(x = var1, y = var2, colour = factor(value))) 
p <- p + geom_jitter(position = position_jitter(width = 0.1, height = 0.1)) 
p <- p + scale_colour_discrete(breaks = 1:5) 
p 

愚蠢簡單;只需強制將連續值像個別因子水平一樣處理,然後通過breaks和ggplot2控制色階。我發現還有一些其他的答案,儘管我不熟悉這些方法,所以我想我會讓upvotes決定最好的答案。