在Mathematica中聚类2D绘图

500*_*500 3 wolfram-mathematica cluster-analysis

laListe={{{{10, 17}, 1}, {{33, 12}, 1}, {{32, 17}, 1}, {{9, 10},1}, 
         {{22, 24}, 1},{{27, 6}, 2}, {{25, 13}, 2}, {{30, 9}, 2}}, 
         {{{14, 12}, 1},{{19, 17}, 1}, {{7, 21}, 1}, {{7, 24},1}, 
         {{27, 19}, 1}, {{12, 16}, 2}, {{13, 20}, 2}, {{20, 22}, 2}}}

FrameXYs = {{4.32, 3.23}, {35.68, 26.75}}


Row[Function[compNo, 
             Graphics[{White, EdgeForm[Thick], 
             Rectangle @@ FrameXYs, 
             Black, 
             Disk[Sequence @@ laListe[[compNo, #]]] & /@ 
             Range[Length@laListe[[compNo]]]}, ImageSize -> 300]] /@ 
             {1, 2}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想找到一种方法来聚集这些磁盘,因为它们彼此接近.Mathematica有内置功能来做这样的事吗?

编辑

当我尝试使用FindClusters时,我遇到了一些不便之处:

用:

list1={{{24.413, 6.5978}, {7.68887, 7.2147}, {29.357, 13.2822}, 
       {6.22436, 9.7145}, {22.7162, 17.7198}, {13.6851, 5.7635}, 
       {18.8062, 12.9946}, {8.04889, 16.7414}}}
Run Code Online (Sandbox Code Playgroud)

FindClusters dislkike Decimals:

FindClusters[Flatten[list1,1]]
Run Code Online (Sandbox Code Playgroud)

出:

  {{{{24.413, 6.5978}, {7.68887, 7.2147}, {29.357, 13.2822}, 
     {6.22436,9.7145}, {22.7162, 17.7198}, {13.6851, 5.7635}, 
     {18.8062,12.9946}, {8.04889, 16.7414}}}}
Run Code Online (Sandbox Code Playgroud)

鉴于:

  FindClusters[Flatten[Round[list1], 1]]
Run Code Online (Sandbox Code Playgroud)

出:

   {{{24, 7}, {29, 13}, {23, 18}, {14, 6}, {19, 13}}, 
    {{8, 7}, {6, 10}, {8, 17}}}
Run Code Online (Sandbox Code Playgroud)

然后,要做到这一点,我必须摆脱磁盘直径,这对我来说是重要的视觉集群.然后我想捕捉对齐.当5个磁盘未分组但对齐时.当我在一些组合物上测试时,它没有找到那样的.

在我尝试的事情是使用以下"Pointize"磁盘:

pointize[{{x_,y_},r_},size_:12] :=
                                  Table[{x+r Cos[i ((2\[Pi])/size)],
                                  y+r Sin[i ((2\[Pi])/size)]},{i,0,size}]
Run Code Online (Sandbox Code Playgroud)

我最初使用它来计算那些磁盘的ConvexHullArea.我觉得它可以帮助我考虑到半径,但实施起来很棘手,我甚至不确定它是否相关

此外,我希望它只是小数问题,但我不能使用FindClusters [list],但必须给它我想要FindClusters [list,3]的簇数,而我想要的是拥有相同的算法可以在不同的成分上找到不同的簇号.

您是否会想到使用FindClusters执行特定设置和/或距离功能?

编辑

感谢先前的技巧,感谢专家们,我找到了一些有趣的东西.只是一个想法,我需要找到一种方法来量化它并将新图像以矩阵形式左右使用.

comp1 = Graphics[{White, Rectangle @@ FrameXYs, Black, 
     Disk[Sequence @@ laListe[[1, #]]] & /@ Range[Length@laListe[[1]]]},
     ImageSize -> 300]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

     Binarize[ImageCorrelate[comp1, GaussianMatrix[40]], .95]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ver*_*eia 7

是的,FindClusters应该做你想要的.有一个教程.您可能必须将数据展平为n3倍矩阵.