Как добавить границы кластеров в ggplot для самоорганизующихся карт? - PullRequest
0 голосов
/ 09 апреля 2019

Я использую коды по этой ссылке: http://blog.schochastics.net/post/soms-and-ggplot/ для построения моих самоорганизующихся карт в R. Однако мне нужно нечто похожее на то, что делает встроенная функция add.cluster.boundaries. Пожалуйста, помогите.

library(tidyverse)  # for data wrangling
library(stringr)    # for string manipulations
library(kohonen)    # implements self organizing maps
library(ggforce)    # for additional ggplot features

r_sample <- sample(1:nrow(fifa_tbl),2000)
fifa_tbl <- fifa_tbl[r_sample,]
glimpse(fifa_tbl)

fifa_som <- fifa_tbl %>%
  select(Acceleration:Volleys) %>%
  scale() %>%
  som(grid = somgrid(15, 15, "hexagonal","gaussian"), rlen = 800)

som_grid <- fifa_som[[4]]$pts %>%
  as_tibble %>% 
  mutate(id=row_number())
som_grid

som_pts <- tibble(id = fifa_som[[2]],
                  dist = fifa_som[[3]],
                  type = fifa_tbl$position2)

som_pts <- som_pts %>% left_join(som_grid,by="id")

p <- som_grid %>% 
  ggplot(aes(x0=x,y0=y))+
  geom_circle(aes(r=0.5))+
  theme(panel.background = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank(),
        axis.text = element_blank(),
        axis.title = element_blank(),
        legend.position = "bottom")

p+geom_jitter(data=som_pts,aes(x,y,col=type),alpha=0.5)+
  scale_color_manual(values=c("#F8766D","#7CAE00","#00B0B5","#C77CFF"),name="Position")

Приведенный выше код приводит к этому. введите описание изображения здесь

Однако я хочу добавить границы кластера, используя ggplot. Пакет kohonen имеет встроенную функцию add.cluster.boundaries, которая делает это.

som.cluster <- cutree(hclust(dist(as.data.frame(fifa_som$codes)), method = "complete"), 6)

plot(fifa_som, type="mapping", pch=20,
     col = c("#F8766D","#7CAE00","#00B0B5","#C77CFF")[as.integer(fifa_tbl$position2)],
     shape = "round")

add.cluster.boundaries(fifa_som, som.cluster, lwd = 3, lty = 2)

Я хочу сгенерировать такие границы кластера, используя ggplot в предыдущем фрагменте кода.

...