Наложение нескольких кластеров fviz - PullRequest
0 голосов
/ 02 октября 2018

Я хотел бы показать несколько прозрачных наложенных графиков "fviz_cluster" на одном графике (с одинаковыми данными):

library(ggplot2)
library(dbscan)
library(factoextra)
d = cbind(iris$Sepal.Length, iris$Sepal.Width)
# cluster the data (could be k-means, or any other method)
clus = dbscan(d, eps=0.2, minPts=5)
fviz_cluster(clus, data=iris,
             choose.vars=c("Sepal.Length", "Sepal.Width"),
             ellipse.type="convex", geom="point", show.clust.cent=FALSE)

enter image description here

# cluster again with different parameters
clus2 = dbscan(d, eps=0.3, minPts=5)
# How would I overlay the outlines and shading of the 'clus2' clusters

enter image description here

Итак, я хотел бы наложить эти два графика.Я бы изменил цветовую палитру второй, конечно.Есть ли способ сделать это с fviz_cluster "с полки" или я должен идти во внутренние органы?Я удивлен, что fviz_cluster должен быть «основан на ggplot2», но не разрешает наложение его графиков, если я что-то не пропустил.

1 Ответ

0 голосов
/ 06 октября 2018

Грубо скомбинированный кластер

fviz_cluster() рад построить что-либо с помощью cluster и data, так что вы можете грубо объединить данные и построить их, но это не реализует выделенные функции, например:

combined <- data.frame(cluster=clus1$cluster)
combined <- rbind(combined,
                  data.frame(cluster=ifelse(clus2$cluster > 0,
                                            clus2$cluster + max(combined$cluster),
                                            0)))
combined$data <- rbind(iris, iris)

fviz_cluster(combined,
             choose.vars=c("Sepal.Length", "Sepal.Width"),
             ellipse.type="convex",
             geom="point", show.clust.cent=FALSE)

fviz_cluster() plotting two crudely combined clusters

Реализация слияния dbscan

Вы можете объединить два или более объекта dbscan, написав свою собственную функцию, но это, вероятно, не будет выглядетьнамного лучше, чем в предыдущем примере.

Внешнее объединение

ImageMagick может смешивать изображения вместе и изменять цвета.Я не думаю, что это будет работать хорошо, потому что точки наложения и их внешний вид будут меняться, делая легенду неполной, и т. Д., Но вот пример:

convert AWRRa.png -modulate 100,100,120 \
    \( AN4Ng.png -alpha set -channel a -evaluate set 70% +channel \) \
    -compose over -composite blended.convert.png

The two plots from question combined with ImageMagick

Время анимации!

Тангенциальный ответ на вопрос, но его стоит изучить (в зависимости от вашего носителя) с помощью gganimate или с помощью ImageMagick для объединения ggsave() кадров, например:

ggplot png frames combined as an animated gif by ImageMagick

Несколько изображений

Отказ и переход на несколько графиков с помощью grid.arrange () - еще один вариант!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...