【问题标题】:separate clusters observable in ggplot through a vector? R通过向量在ggplot中可观察到的单独簇? R
【发布时间】:2021-01-17 23:59:05
【问题描述】:
 df <- data.frame(samples = c('A1','B1','C1','K3','L4','M5','N5','O5'),var1 = c('12','34','54','54','0.1','0.45','0.99','5'),var2 = c('16.5','26.5','21.2','19.8','2.98','3','1.99','2.65'))

ggplot(df,aes(var1,var2)) + geom_point(shape = 21, col = 'black', size = 4)

我想区分 ggplot 中可观察到的两个集群。

所以三个数据点和五个数据点在我想要区分的两个集群中。我认为我可以通过将两组分开的向量以某种方式做到这一点,但我不知道具体是如何做到的。

我想要一个df,末尾有集群信息

  samples var1 var2    cluster
1      A1   12 16.5    1
2      B1   34 26.5    2
3      C1   54 21.2    2
4      K3   54 19.8    2
5      L4  0.1 2.98    1  
6      M5  0.45 3.00   2
7      N5  0.99 1.99   1
8      O5    5 2.65    2

【问题讨论】:

    标签: r ggplot2 vector cluster-analysis


    【解决方案1】:

    首先,如果您查看绘制的内容,您会发现 x 轴的顺序不正确或间距不正确。那是因为您的数据框在数字周围有引号。因此,这些有效地被绘制为均匀间隔的因子水平。在这种情况下,您看到的集群不是真实的。

    如果您使用实际数字,您的绘图将如下所示:

    df <- data.frame(samples = c('A1','B1','C1','K3','L4','M5','N5','O5'),
                     var1 = c(12, 34, 54, 54, 0.1, 0.45, 0.99, 5),
                     var2 = c(16.5, 26.5, 21.2, 19.8, 2.98, 3, 1.99, 2.65))
    
    ggplot(df, aes(var1, var2)) +
      geom_point(shape = 21, size = 4)
    

    我想我可以在这张图片的左下角看到一个集群,但我不相信其余的点。在任何情况下,您都可以很容易地根据距离将所有这些点分成两个集群:

    df$cluster <- factor(cutree(hclust(dist(df[-1])), k = 2))
    
    df
    #>   samples  var1  var2 cluster
    #> 1      A1 12.00 16.50       1
    #> 2      B1 34.00 26.50       2
    #> 3      C1 54.00 21.20       2
    #> 4      K3 54.00 19.80       2
    #> 5      L4  0.10  2.98       1
    #> 6      M5  0.45  3.00       1
    #> 7      N5  0.99  1.99       1
    #> 8      O5  5.00  2.65       1
    

    你可以像这样绘制它:

    ggplot(df, aes(var1, var2)) +
      geom_point(aes(fill = cluster), shape = 21, size = 4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 2021-12-13
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多