1

プロットを使用してサンプルをプロットし、等高線を使用して平面を分類する線をプロットすることで、R で knn 分類プロットを描画します。

これが私のコードです:

k<-1
datax<-rbind(matrix(rnorm(30,-1,5.25),15,2),matrix(rnorm(36,1,5.25),18,2))
datay<-rbind(matrix(1,15,1),matrix(0,18,1))
plot(datax[,1], datax[,2],pch = datay+1,axes=FALSE,ann=FALSE)
box()
n <- 1000
xp <- seq(length=n, from = min(datax[,1]), to = max(datax[,1]))
yp <- seq(length=n,from = min(datax[,2]) ,to = max(datax[,2]))
gr <- expand.grid(xp, yp)
library(class)
z <- as.numeric(knn(datax, gr, datay,k))-1
zM <- matrix(z, n, n, byrow = FALSE)
contour(xp, yp, zM, xlab="x",ylab="",nlevels = 1 ,lwd=2, add=TRUE, drawlabels =FALSE)

私の質問は次のとおりです。プロット内の囲まれた領域に色を付けるにはどうすればよいですか? 私はfilled.contourを試しましたが、addパラメータはありません。私は単純に、分類子が白で 0 で、分類が 1 である領域を青で表示したいだけです。どうすればいいですか?ありがとう

4

1 に答える 1

2

の代わりにcontour、 を使用contourLinesして等高線のエッジの座標を保持し、 でプロットできますpolygon

plot(datax[,1], datax[,2],axes=FALSE,ann=FALSE, type="n")
box()
cL <- contourLines(xp, yp, zM,nlevels = 1)
lapply(cL,function(x)polygon(x$x,x$y,col="red"))
points(datax[,1], datax[,2],pch = datay+1)

ただし、プロットの端に到達する等高線 (2 番目のプロットの左下隅を参照) では完全ではないため、手動で調整する必要があります。
ここに画像の説明を入力

編集:ネストされた等高線の場合、それを処理する簡単な方法はないと思いますが、ここに1つの方法があります:

library(splancs)
ord <- sapply(lapply(cL,function(x)datay[inout(datax,cbind(x$x,x$y))]),
              median) #Check what values are present in the polygon and 
                      #take the most common one
plot(datax[,1], datax[,2],axes=FALSE,ann=FALSE, type="n")
box()
lapply(cL[ord==1],function(x)polygon(x$x,x$y,col="blue"))
lapply(cL[ord==0],function(x)polygon(x$x,x$y,col="white"))
points(datax[,1], datax[,2],pch = datay+1)

ここに画像の説明を入力

2番目の編集:imageもちろん、あなたの場合に関数を使用する可能性もあります:

image(xp, yp, zM, col=c("transparent","blue"))
points(datax[,1], datax[,2],pch = datay+1)

ここに画像の説明を入力

于 2013-04-09T12:00:15.647 に答える