现在,我只是使用这样的东西:
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)的“bins”颜色标度,以便像{ {1}}适用于因素。
所以,我的问题:
1)ggplot2是否可以通过scale_colour_discrete
以某种方式“bin”这些,所以即使这是连续数据,我也可以应用默认的因子级着色方案?
2)如果没有,是否有更简单的方法来创建一个新的向量,我根据标准将数字/字母替换为我的值?我是一个R新手,所以我不确定除了一堆scale_colour_continuous
或条件语句(if()
或类似的东西)。
答案 0 :(得分: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)
答案 1 :(得分: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'))
答案 2 :(得分: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
愚蠢简单;只需强制将连续值视为单个因子级别,然后使用ggplot2通过breaks
控制色标。我也看到了其他一些答案,虽然我不熟悉这些方法,所以我想我会让upvotes决定最佳答案。