在ggplot2中使用颜色作为列来标记颜色点

14

我有一个数据框,其中每个点的颜色都在一列中给出:

d<-data.frame(x=1:10,y=1:10,col=c(rep("red",n=5),rep("green",n=5)))
d$col<-as.character(d$col)
ggplot(data=d,aes(x=x,y=y,colour=col))+geom_point()

正如您所看到的,颜色并不是被解释为一种颜色,而是一个组别。

在此输入图片描述

ggplot能够处理这种情况吗?


@DavidHeckmann 我不认为这是一个好的重复目标。它涉及到在多个独立的图中为组提供一致的着色。然而,我相信实际问题之前已经被问过了。 - Uwe
2个回答

22

这个问题很可能以前已经被提出并得到答案了。然而,在设置数据时还有另一个问题。

楼主正在通过以下方式创建数据:

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,有效的参数为timeslenght.outeach

可能,楼主的意思是

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()
产生相同的图表:

这里输入图片描述


6

刚刚发现一个技巧:

颜色应该作为独立的向量给出,而不是与数据相关联

ggplot(data=d,aes(x=x,y=y))+geom_point(colour=d$col)

3
另请参阅 scale_color_identity - aosmith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接