4

现在,我只是使用这样的东西:

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 中是否有更好的方法可以做到这一点,或者只是scale通过应用一些参数ggplot2来进行分类。


可能有几种方法可以解决这个问题,所以很难准确地表达我的问题。这是要点......我有这样的数据:

 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

这给出了这样的东西:

在此处输入图像描述

我的实际数据来自 1-5 个评分的主观评估,但我将类似的问题捆绑在一起并将它们平均在一起,因此它们不再是整数。

我正在绘制每个因素组合的评分,以可视化哪些组合产生了更高的评分。默认的连续比例并没有真正“流行”,我想让颜色比例来处理这些值(0-1、1-2、... 4-5)的“箱”,就像scale_colour_discrete这样为因素。

所以,我的问题:

1) ggplot2 是否可以通过某种方式“bin”这些,scale_colour_continuous这样即使这是连续数据,我也可以应用默认因子级别着色方案?

2)如果没有,有没有更简单的方法来创建一个新的向量,我根据标准用数字/字母代替我的值?我有点 R 新手,所以我不确定除了一堆if()或条件语句(test_data[test_data > 0 & test_data < 1, "values"] <- "a"或类似的东西)。

4

3 回答 3

5

最简单的解决方案是

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

现在,您data.frame将根据该列包含一列因素values,因此您可以aes(..., color=Discrete,...)ggplot. test_data完成绘图后,将保留的格式。

当然,要保留一个离散列,最好的选择是:

test_data$Discrete <- cut(values, seq(0,5,1), include.lowest=T)
于 2013-02-08T00:12:17.047 回答
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'))

在此处输入图像描述

于 2013-02-08T00:15:56.220 回答
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

愚蠢的简单;只需强制将连续值视为单个因子水平,然后通过breaksggplot2 控制色标。我看到还有其他一些答案,虽然我不熟悉这些方法,所以我想我会让投票决定最佳答案。

于 2013-02-08T00:19:55.353 回答