R:在图上叠加簇
R: Superimpose Clusters on top of a Graph
我正在使用 R 编程语言。我创建了一些数据并制作了这些数据的 KNN 图。然后我对这张图进行了聚类。现在,我想将聚类叠加到图的顶部。
这是我编的一个例子(来源:https://michael.hahsler.net/SMU/EMIS8331/material/jpclust.html)——假设我们有一个包含 3 个变量的数据集:房子的经度、房子的纬度和房子的价格(我们“缩放”所有这些变量,因为“价格”和“long/lat”的单位不同)。然后我们可以制作一个 KNN 图(使用 R 软件):
library(dbscan)
plot_nn <- function(x, nn, ...) {
plot(x, ...)
for(i in 1:nrow(nn$id))
for(j in 1:length(nn$id[i,]))
lines(x = c(x[i,1], x[nn$id[i,j],1]), y = c(x[i,2], x[nn$id[i,j],2]))
}
Lat = round(runif(500,43,44), 4)
Long = round(runif(500,79,80), 4)
price = rnorm(500,1000000,200)
b = data.frame(Lat, Long, price)
b = scale(b)
b = as.matrix(b)
nn <- kNN(b, k = 10, sort = FALSE)
plot_nn(b, nn, col = "grey")
现在,我执行聚类算法:
x = b
JP_R <- function(x, k, kt) {
# Step 1
nn <- kNN(x, k, sort = FALSE)$id
n <- nrow(nn)
# Step 2
labels <- 1:n
# Step 3
for(i in 1:n) {
# check all neighbors of i
for(j in nn[i,]) {
if(j<i) next ### we already checked this edge
if(labels[i] == labels[j]) next ### already in the same cluster
if(i %in% nn[j,] && length(intersect(nn[i,], nn[j,]))+1L >= kt) {
labels[labels == max(labels[i], labels[j])] <- min(labels[i], labels[j])
}
}
}
# Step 4: create contiguous labels
as.integer(factor(labels))
}
cl <- JP_R(x, k = 10, kt = 6)
我可以画出这个聚类算法的基本图:
plot(x, col = cl)
但是有没有办法在第一张图片上显示这些集群?
是这样的吗?
谢谢
您可以使用其中之一
points(x, col = cl)
或
par(new = TRUE)
plot(x, col = cl)
我正在使用 R 编程语言。我创建了一些数据并制作了这些数据的 KNN 图。然后我对这张图进行了聚类。现在,我想将聚类叠加到图的顶部。
这是我编的一个例子(来源:https://michael.hahsler.net/SMU/EMIS8331/material/jpclust.html)——假设我们有一个包含 3 个变量的数据集:房子的经度、房子的纬度和房子的价格(我们“缩放”所有这些变量,因为“价格”和“long/lat”的单位不同)。然后我们可以制作一个 KNN 图(使用 R 软件):
library(dbscan)
plot_nn <- function(x, nn, ...) {
plot(x, ...)
for(i in 1:nrow(nn$id))
for(j in 1:length(nn$id[i,]))
lines(x = c(x[i,1], x[nn$id[i,j],1]), y = c(x[i,2], x[nn$id[i,j],2]))
}
Lat = round(runif(500,43,44), 4)
Long = round(runif(500,79,80), 4)
price = rnorm(500,1000000,200)
b = data.frame(Lat, Long, price)
b = scale(b)
b = as.matrix(b)
nn <- kNN(b, k = 10, sort = FALSE)
plot_nn(b, nn, col = "grey")
现在,我执行聚类算法:
x = b
JP_R <- function(x, k, kt) {
# Step 1
nn <- kNN(x, k, sort = FALSE)$id
n <- nrow(nn)
# Step 2
labels <- 1:n
# Step 3
for(i in 1:n) {
# check all neighbors of i
for(j in nn[i,]) {
if(j<i) next ### we already checked this edge
if(labels[i] == labels[j]) next ### already in the same cluster
if(i %in% nn[j,] && length(intersect(nn[i,], nn[j,]))+1L >= kt) {
labels[labels == max(labels[i], labels[j])] <- min(labels[i], labels[j])
}
}
}
# Step 4: create contiguous labels
as.integer(factor(labels))
}
cl <- JP_R(x, k = 10, kt = 6)
我可以画出这个聚类算法的基本图:
plot(x, col = cl)
但是有没有办法在第一张图片上显示这些集群?
是这样的吗?
谢谢
您可以使用其中之一
points(x, col = cl)
或
par(new = TRUE)
plot(x, col = cl)