这个问题很可能以前已经被提出并得到答案了。然而,在设置数据时还有另一个问题。
楼主正在通过以下方式创建数据:
d <- data.frame(x = 1:10,
y = 1:10,
col = c(rep("red", n = 5), rep("green", n = 5)))
这导致两种颜色交替显示
d
# x y col
#1 1 1 red
#2 2 2 green
#3 3 3 red
#4 4 4 green
#5 5 5 red
#6 6 6 green
#7 7 7 red
#8 8 8 green
#9 9 9 red
#10 10 10 green
原因是n
不是rep()
函数的一个定义参数。根据?rep
,有效的参数为times
、lenght.out
和each
。
可能,楼主的意思是
d <- data.frame(x = 1:10,
y = 1:10,
col = c(rep("red", 5), rep("green", 5)))
这导致连续的行被着相同的颜色:
d
# x y col
#1 1 1 red
#2 2 2 red
#3 3 3 red
#4 4 4 red
#5 5 5 red
#6 6 6 green
#7 7 7 green
#8 8 8 green
#9 9 9 green
#10 10 10 green
顺便说一下,
col = c(rep("red", 5), rep("green", 5))
可以更清晰地书写为
col = rep(c("red", "green"), each = 5)
有了这个,下面的情节陈述
library(ggplot2)
# variant 1 (OP's own answer)
ggplot(data = d, aes(x = x, y = y)) + geom_point(colour = d$col)
# variant 2 (aosmith' comment, more "ggplot2-like")
ggplot(data = d, aes(x = x, y = y, colour = col)) + geom_point() +
scale_colour_identity()
产生相同的图表:
刚刚发现一个技巧:
颜色应该作为独立的向量给出,而不是与数据相关联
ggplot(data=d,aes(x=x,y=y))+geom_point(colour=d$col)
scale_color_identity
。 - aosmith