2

我正在尝试使用两个数据系列创建一个非常简单的散点图。我想通过我正在使用的数据框中的第四列指定每个点的颜色。我的散点图本身靠近我想要的位置,两个系列有两个不同的字形,但颜色没有分配给正确的点。我对 R 很陌生,所以我不确定从这里去哪里。任何帮助,将不胜感激。附上示例数据和代码(还不能上传图片)。

样本数据:

x   y   group   color
0   0   g   red
2   -1  g   blueviolet
0   -1  g   brown
2   -2  g   blueviolet
0   -11 g   blue
2   -6  g   blue
0   1   g   coral
0   -2  g   blue
2   -1  h   blueviolet
0   -1  h   brown
2   -2  h   blueviolet
0   -11 h   blue
2   -6  h   blue
0   1   h   coral
2   -8  h   blue
4   -2  h   coral
1   -5  h   brown
1   -9  h   violet
-2  2   h   blue

示例 R 代码:

ztest=read.table(file="ztest.txt",sep="\t",header=TRUE)
plot(ztest$x,ztest$y,type='n')
points(ztest[ztest$group=="g",]$x,ztest[ztest$group=="g",]$y,col=ztest$color,pch=3,cex=.75)
points(ztest[ztest$group=="h",]$x,ztest[ztest$group=="h",]$y,col=ztest$color,pch=1,cex=1.75)
4

2 回答 2

2

答案可能是当您使用 read.table 读取颜色时,颜色被解释为一个因素。尝试

ztest$color <- as.character(ztest$color)

看看它是否有效。

或者 ggplot2 非常适合这种事情。完成上述操作后,尝试替代您的方法

library(ggplot2)
qplot(x,y, color=color, shape=group, data=ztest, size=group) + 
    scale_color_identity(legend=FALSE) +
    scale_shape_manual(values=c(3,1)) +
    scale_size_manual(values=c(3,6))
于 2012-06-07T23:59:53.987 回答
1

您似乎在对点进行子集化,但没有对颜色进行子集化。代替

points(ztest[ztest$group=="g",]$x,ztest[ztest$group=="g",]$y,col=ztest$color, ...

尝试

points(ztest[ztest$group=="g",]$x,ztest[ztest$group=="g",]$y,col=as.character(ztest[ztest$group=="g",]$color), ....

希望这可以帮助

于 2012-06-08T03:15:29.310 回答