ggplot2를 통해 dbscan 클러스터링 결과를 플롯하려고합니다. 올바르게 이해하면 현재 dbscan은 기본 플롯 기능으로 검은 색으로 노이즈를 그립니다. 우선 몇 가지 코드,ggplot2를 통한 DBSCAN 클러스터링
library(dbscan)
n <- 100
x <- cbind(
x = runif(5, 0, 10) + rnorm(n, sd = 0.2),
y = runif(5, 0, 10) + rnorm(n, sd = 0.2)
)
plot(x)
kNNdistplot(x, k = 5)
abline(h=.25, col = "red", lty=2)
res <- dbscan::dbscan(x, eps = .25, minPts = 4)
plot(res, x, main = "DBSCAN")
x <- data.frame(x)
ggplot(x, aes(x = x, y=y)) + geom_point(color = res$cluster+1, pch = clusym[res$cluster+1])
+ theme_grey() + ggtitle("(c)") + labs(x ="x", y = "y")
나는 두 가지 다른 여기 싶지는 먼저 ggplot()
통해 클러스터링 출력을 플롯하려고합니다. 피하기 위해 res$cluster
을 사용한다면, plot()
은 0 점 (잡음 점)이있는 점을 무시하고 res$cluster
길이의 오류는 플롯 할 실제 데이터보다 작지만 res$cluster+1
을 사용하려고 시도하면됩니다 내가 원하지 않는 잡음 점에 1을 줄 것입니다. 그리고 둘째 가능하다면 clusym[]
패키지 fpc
에있는 것을 시도하십시오. 레이블 1, 2, 3, ...이있는 클러스터를 플롯하고 0 개의 레이블을 무시합니다. 소음 포인트에 대한 내 레이블이 여전히 0이고 특정 기호를 지정하면 특정 색상의 노이즈 포인트에 "*"라고 말하면 회색으로 표시됩니다. 난 볼록 선체 음모에 대한 비슷한 일을하려고 스택 오버플로 게시물을 봤지만, 선체를 그려 각 클러스터에 대한 클러스터링 번호를 원한다면이 작업을 수행하는 방법을 알아 내지 못했습니다. 내가 생각한 가능성은 처음에는 노이즈가없는 포인트를 플롯하고 원래의 플롯에 원하는 색상과 기호가있는 노이즈 포인트를 추가하는 것입니다. 그러나 res$cluster
길이가 x와 같지 않으므로 오류가 발생합니다.
ggplot(x, aes(x = x, y=y)) + geom_point(color = res$cluster+1, pch = clusym[res$cluster+1])
+ theme_grey() + ggtitle("(c)") + labs(x ="x", y = "y") + adding noise points
Error: Aesthetics must be either length 1 or the same as the data (100): shape, colour