2013-02-08 37 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决定最好的答案。