Как я могу сделать трехмерный график в R кластеров, полученных с помощью kmeans? - PullRequest
1 голос
/ 08 марта 2020

My содержит наблюдения с 3 атрибутами, я использовал , чтобы объединить их в четыре разные группы. Моя цель - построить кластеры, которые я получил, на графике , чтобы иметь быстрый и простой способ просмотра кластеризованных данных.

Однако я не знаю, как построить график. в 3D у меня есть код, который работает с 2D, но я не знаю, как его адаптировать, чтобы добавить измерение. У меня есть следующий код:

    library(ggplot2)
set.seed(137)
km = kmeans(bella,4, nstart=25)

df = as.data.frame(bella)
df$cluster = factor(km$cluster)
centers=as.data.frame(km$centers)
df

 ggplot(data=df, aes(x=Annual.Income..k.., z = Age, y=Spending.Score..1.100.)) +
 geom_point() + theme(legend.position="right") +
 geom_point(data=centers,
 aes(x=Annual.Income..k.., y=Spending.Score..1.100., z=Age,color=as.factor(c(1:4))), aes(x=Age, y=Spending.Score..1.100., color=as.factor(c(1:4))),
 size=10, alpha=.3, show.legend=FALSE)

Как создать 3D-график? Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 08 марта 2020

Вы также можете использовать plotly:

df = iris[,1:3]
df$cluster = factor(kmeans(df,3)$cluster)

library(plotly)
library(dplyr)
p <- plot_ly(df, x=~Sepal.Length, y=~Sepal.Width, 
z=~Petal.Length, color=~cluster) %>%
     add_markers(size=1.5)
print(p)

enter image description here

Другой вариант с htmlwidget использует три js (который основан на scatterplot3d как показано в ответе @ G5W):

library(threejs)
COLS = RColorBrewer::brewer.pal(3,"Set2")
scatterplot3js(as.matrix(df[,1:3]),col=COLS[df$cluster],size=0.3)

enter image description here

3 голосов
/ 08 марта 2020

Вы не предоставляете свои данные, поэтому я проиллюстрирую их встроенными данными радужной оболочки

Вот два способа:

library(scatterplot3d)
scatterplot3d(iris[,2:4], pch=20, color=rainbow(3)[km$cluster])

Result of scatterplot3d

ИЛИ

library(rgl)
plot3d(iris[,2:4], col=rainbow(3)[km$cluster])

3D plot from rgl

Когда вы запускаете эту версию, вы можете нажать на изображение и повернуть его вокруг, чтобы увидеть разные углы.

...