colorRampPalette在2个以上的集群中

colorRampPalette在2个以上的集群中,r,colors,cluster-analysis,R,Colors,Cluster Analysis,我想根据与点相关的概率函数,用模糊的方式给我的点涂上不同的颜色 我处理了两个案子。首先,我要建立我的数据集和一个与给定的2个集群相关的概率 set.seed(16) rbPal <- colorRampPalette(c('yellow','red')) (mu1<-c(0,0)) # vector mean multinom 1 (S1<-matrix(c(0.1,0,0,0.6),2)) # var/cov matrix multinom

我想根据与点相关的概率函数,用模糊的方式给我的点涂上不同的颜色

我处理了两个案子。首先,我要建立我的数据集和一个与给定的2个集群相关的概率

set.seed(16)
rbPal <- colorRampPalette(c('yellow','red')) 
(mu1<-c(0,0))                  # vector mean multinom 1
(S1<-matrix(c(0.1,0,0,0.6),2)) # var/cov matrix multinom 1
(mu2<-c(3,0))                  # vector mean multino 2
(S2<- matrix(c(1,0,0,0.1),2))  # var/cov matrix multinom 2

x1<-mvrnorm(n=100, mu=mu1,Sigma=S1 )
x2<-mvrnorm(n=100, mu=mu2,Sigma=S2 )

x<-rbind(x1,x2)              # Dataset

euc.dist<-function (a,b){
sqrt(sum((a-b)^2))
}

randC<-x[sample(nrow(x),2),]
Distmatrix<- t(apply(x,1,function(r) apply(randC,1, function(s) euc.dist(r, 
s))))
mat<-matrix(,200,2)
mat<-apply(mat,2,function(x) x=apply(Distmatrix,1, prod))/Distmatrix

P<-t(apply(mat, 1, function(x) x/sum(x)))
D4<-data.frame(x,P)

D4$Col <- rbPal(10)[as.numeric(cut(D4$X1.1,breaks = 10))]


plot(D4$X1,D4$X2,pch = 20,col = D4$Col, cex=1.2) 
points(randC, col="red")
set.seed(16)

rbPal您可能需要自己完成混合功能

如果有两个以上的簇,线性颜色空间就不够了

最简单的选择是在每个成分中进行线性混合。直接执行。对于更高级的情况,您可能希望“平衡”点(所有距离都相等)为灰色,而不是平均颜色

作为一种特殊的解决方案,您还可以为每个簇设置选项板,从灰色到簇颜色。然后使用第i个调色板的(x_j-x_i)/x_j作为值,其中x_i最小,x_j次之。如果x_i=x_j,该值将为0(灰色)。如果x_i=0,则该值为1


这可能相当漂亮,但可能会产生误导,因为它没有在所有地方使用相同的缩放。

我认为我找到了一个很好的解决方案,以下是原因:

set.seed(50)
mat<-matrix(,200,3) 
randC<-x[sample(nrow(x),3),]
Distmatrix<- t(apply(x,1,function(r) apply(randC,1, function(s) euc.dist(r, 
                                                                         s))))

mat<-apply(mat,2,function(x) x=apply(Distmatrix,1, prod))/Distmatrix

P<-t(apply(mat, 1, function(x) x/sum(x)))
D4<-data.frame(x,P)


rbPal<-list()
for(i in 1:k){
  rbPal[[i]] <- colorRampPalette(c('white',col=I(i+1)))
}
for(i in 1:k){
  D4[[dim(D4)[2]+1]] <- rbPal[[i]](10)[as.numeric(cut(D4[[2+i]],breaks = 10))]
}


for(i in 1:k){
  D4[[dim(D4)[2]+1]]<-t(col2rgb(D4[[dim(D4)[2]-k+1]])) 
}

prova<-matrix(0,dim(D4)[1],3)
for(i in 1:k){
  prova<-prova+D4[,(dim(D4)[2]-k+i)]*P[,i]
}
prova[is.nan(prova)] <- 0
provcol=apply(prova,1, function(x) rgb(x[1], x[2], x[3], maxColorValue=255))
plot(D4$X1,D4$X2,pch = 20,col = provcol, cex=1.5) 
points(randC, col="red")
set.seed(50)
垫子
set.seed(50)
mat<-matrix(,200,3) 
randC<-x[sample(nrow(x),3),]
Distmatrix<- t(apply(x,1,function(r) apply(randC,1, function(s) euc.dist(r, 
                                                                         s))))

mat<-apply(mat,2,function(x) x=apply(Distmatrix,1, prod))/Distmatrix

P<-t(apply(mat, 1, function(x) x/sum(x)))
D4<-data.frame(x,P)


rbPal<-list()
for(i in 1:k){
  rbPal[[i]] <- colorRampPalette(c('white',col=I(i+1)))
}
for(i in 1:k){
  D4[[dim(D4)[2]+1]] <- rbPal[[i]](10)[as.numeric(cut(D4[[2+i]],breaks = 10))]
}


for(i in 1:k){
  D4[[dim(D4)[2]+1]]<-t(col2rgb(D4[[dim(D4)[2]-k+1]])) 
}

prova<-matrix(0,dim(D4)[1],3)
for(i in 1:k){
  prova<-prova+D4[,(dim(D4)[2]-k+i)]*P[,i]
}
prova[is.nan(prova)] <- 0
provcol=apply(prova,1, function(x) rgb(x[1], x[2], x[3], maxColorValue=255))
plot(D4$X1,D4$X2,pch = 20,col = provcol, cex=1.5) 
points(randC, col="red")