我仍在努力研究R图和颜色 - 有些结果是我预期的,有些则没有 .
我有一个200万点数据集,由模拟过程生成 . 数据集上有几个变量,但我对三个以及描述该数据点的类的因素感兴趣 .
这是一段简短的代码,可以读取点并获得一些基本的统计信息:
library(lattice)
library(plyr)
myData <- read.table("dados - b1000 n10000 var 0,2 - MAX40.txt",
col.names=c("Class","Thet1Thet2","Thet3Thet2","Thet3Thet1",
"K12","K23","delta","w_1","w_2","w_3"))
count (myData$Class)
这给了我
## x freq
## 1 A 8030
## 2 B 17247
## 3 C 4999
## 4 D 16495
## 5 E 1949884
## 6 N 3345
(输入文件非常大,无法将其添加为链接)
我想在散点图矩阵中看到这些点,所以我使用代码
colors=c("red","green","blue","cyan","magenta","yellow")
# Let's try with a very small dot size, see if we can visualize the inners of the cube.
cloud(myData$delta ~ myData$K12 + myData$K23, xlab="K12", ylab="K23", zlab="delta",
cex=0.001,main="All Classes",col.point = colors[myData$Class])
这是结果 . 正如预期的那样,E级的分数占绝大多数,所以我看不到其他课程的分数 . 问题是我期望用洋红色绘制点(类别是A,B,C,D,E,N;颜色是红色,绿色,蓝色,青色,品红色,黄色) .
当我按类完成绘图时,它按预期工作,请参阅两个示例:
data <- subset(myData, Class=="A")
cloud(data$delta ~ data$K12 + data$K23, xlab="K12", ylab="K23", zlab="delta",pch=20,main="Class A",
col.point = colors[data$Class])
给出这个:
这段代码
data <- subset(myData, Class=="E")
cloud(data$delta ~ data$K12 + data$K23, xlab="K12", ylab="K23", zlab="delta",pch=20,main="Class E",
col.point = colors[data$Class])
给出这个:
这似乎也是预期的:除了E之外的所有类别的点数 .
data <- subset(myData, Class!="E")
cloud(data$delta ~ data$K12 + data$K23, xlab="K12", ylab="K23", zlab="delta",pch=20,
cex=0.01,main="All Classes (except E)",col.point = colors[data$Class])
问题是, why on the first plot the points are blue instead of magenta?
这个问题在某种程度上类似于Color gradient for elevation data in a XYZ plot with R and Lattice,但现在我使用因子来确定散点图上的颜色 .
我也读过Changing default colours of a lattice plot by factor - 按因子分组图(使用参数groups.factor = myData $ Class)并没有解决我的问题,图仍然是蓝色但是按类分开 .
已编辑以添加更多信息:此假数据集可用于测试 .
num <- 10
data <- as.data.frame(
cbind(
x=rep(seq(1,num), each=num*num),
y=rep(seq(1,num), each=num),
z=rep(seq(1,num))
))
# This is ugly but works!
data$Class[data$z==1]<-'A'
data$Class[data$z==2]<-'A'
data$Class[data$z==3]<-'B'
data$Class[data$z==4]<-'B'
data$Class[data$z==5]<-'C'
data$Class[data$z==6]<-'C'
data$Class[data$z==7]<-'D'
data$Class[data$z==8]<-'D'
data$Class[data$z==9]<-'E'
data$Class[data$z==10]<-'E'
str(data)
当我用它绘图时
colors=c("red","green","blue","cyan","magenta","yellow")
cloud(data$z ~ data$x + data$y, xlab="X", ylab="Y", zlab="Z",main="All Classes",
col.point = colors[data$Class])
我得到下面的情节 . 所有积分均为蓝色 .
1 回答
JeremyCG发现了这个问题 . 以下是完整的代码,供将来参考 .
这显示了这个问题:
等级必须是一个因素 . 这解决了它:
然后绘制它:
结果如下:
谢谢@jeremycg!