Вы не включаете минимальный воспроизводимый пример или образец набора данных, поэтому я буду считать, что вы сделали что-то вроде статьи: https://alstatr.blogspot.com/2014/09/r-k-means-clustering-on-image.html
Одно изменение вкод в вышеупомянутой статье, который может помочь вам связать номер кластера с каждым пикселем, будет следующим:
library(dplyr)
kClusters <- 3
# pick all distinct colors we will be using for clustering
unique_colors <- imgRGB %>% select(R, G, B) %>% distinct()
kMeans <- kmeans(unique_colors, centers = kClusters)
df <- imgRGB %>%
left_join(
# make the data frame to join with the original
bind_cols(unique_colors,
data.frame(
cluster = kMeans$cluster
)),
by = c("R", "G", "B")
)
str(df)
# 'data.frame': 420800 obs. of 6 variables:
# $ x : int 1 1 1 1 1 1 1 1 1 1 ...
# $ y : int 526 525 524 523 522 521 520 519 518 517 ...
# $ R : num 0.00392 0.00392 0.00392 0.00392 0.00392 ...
# $ G : num 0.00392 0.00392 0.00392 0.00392 0.00392 ...
# $ B : num 0.00392 0.00392 0.00392 0.00392 0.00392 ...
# $ cluster: int 2 2 2 2 2 2 2 2 2 2 ...
Тогда вы можете использовать значения кластера для огранки ggplot:
ggplot(data = df, aes(x = x, y = y)) +
geom_point(colour = rgb(df[c("R", "G", "B")])) +
labs(title = "Separated clusters") +
xlab("x") +
ylab("y") +
coord_fixed() +
facet_wrap(~cluster, nrow = 2)
, который выдает что-то вроде:
Надеюсь, это поможет вам решить вашу проблему.