Из вашего примера трудно сказать, какая переменная определяет ваши кластеры. Ниже приведен пример с некоторыми смоделированными кластерами с использованием ggplot2
и data.table
(адаптировано из здесь а>).
library(data.table)
library(ggplot2)
# Simulate data:
set.seed(1)
n_cluster = 50
centroids = cbind.data.frame(
x=rnorm(5, mean = 0, sd=5),
y=rnorm(5, mean = 0, sd=5)
)
dt = rbindlist(
lapply(
1:nrow(centroids),
function(i) {
cluster_dt = data.table(
x = rnorm(n_cluster, mean = centroids$x[i]),
y = rnorm(n_cluster, mean = centroids$y[i]),
cluster = i
)
}
)
)
dt[,cluster:=as.factor(cluster)]
# Find convex hull of each point by cluster:
hulls = dt[,.SD[chull(x,y)],by=.(cluster)]
# Plot:
p = ggplot(data = dt, aes(x=x, y=y, colour=cluster)) +
geom_point() +
geom_polygon(data = hulls,aes(fill=cluster,alpha = 0.5)) +
guides(alpha=F)
Это дает следующий результат:
![Полигональный график с смоделированными кластерами.](https://i.stack.imgur.com/v1S2U.png)
Изменить
Если у вас нет предопределенных кластеров, вы можете использовать алгоритм кластеризации. В качестве простого примера см. ниже решение с использованием kmeans
с 5 центроидами.
# Estimate clusters (e.g. kmeans):
dt[,km_cluster := as.factor(kmeans(.SD,5)$cluster),.SDcols=c("x","y")]
# Find convex hull of each point:
hulls = dt[,.SD[chull(x,y)],by=.(km_cluster)]
# Plot:
p = ggplot(data = dt, aes(x=x, y=y, colour=km_cluster)) +
geom_point() +
geom_polygon(data = hulls,aes(fill=km_cluster,alpha = 0.5)) +
guides(alpha=F)
В этом случае выход для оцененных кластеров почти эквивалентен построенным.
![Полигональный график с кластеризованной оценкой по методу k-средних.](https://i.stack.imgur.com/sNcSf.png)
person
patalt
schedule
15.06.2020