【问题标题】:Scatter plot and clusters within it散点图和其中的集群
【发布时间】:2022-11-13 12:21:09
【问题描述】:

我使用ggplot2 包为我的数据创建了一个散点图。由于我的数据有很多点,我将用已经可用的小数据集解释我的问题。考虑这个散点图:

ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point()

我想使用 k-means clustering 对这些数据点进行聚类,但随后也在同一个散点图(如上所示)而不是新的降维图上显示聚类?我怎样才能做到这一点?

【问题讨论】:

    标签: r ggplot2 k-means scatter-plot


    【解决方案1】:

    一种选择是使用ggforce::geom_mark_ellipse 在集群周围绘制一些椭圆:

    library(ggplot2)
    library(ggforce)
    
    km.mtcars <- kmeans(scale(mtcars), centers = 3)
    
    mtcars2 <- mtcars
    mtcars2$cluster = km.mtcars$cluster
    
    ggplot(mtcars2, aes(x=wt, y=mpg)) + 
      geom_point() +
      ggforce::geom_mark_ellipse(aes(fill = factor(cluster)))
    

    【讨论】:

    • 我们还可以根据属于它的集群的点来获取数据吗?
    • 你能解释一下“基于属于它的集群的点的数据”是什么意思吗?
    • 就像有一个表格,其中显示集群 3 蓝色属于这些点等等。
    • 一般来说是的。不知道你的桌子会是什么样子。但是当我将集群添加到数据框时,您当然可以创建一个表格来显示例如汽车属于哪个集群。
    【解决方案2】:

    这是使用factoextra 包的替代方案:

    library(factoextra)
    
    df <- mtcars %>% 
      select(x = wt, y = mpg)
    
    
    # Compute k-means with k = 3
    
    set.seed(123)
    res.km <- kmeans(scale(df[, -5]), 3, nstart = 25)
    
    res.km$cluster
    
    fviz_cluster(res.km, data = df[, -5],
                 palette = c("steelblue", "gold", "limegreen"), 
                 geom = "point",
                 ellipse.type = "convex", 
                 ggtheme = theme_bw()
    )
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 2017-08-16
      • 2019-11-27
      • 2022-12-15
      • 2013-11-19
      • 2023-01-12
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多