Language agnostic 绘制二维点图

Language agnostic 绘制二维点图,language-agnostic,graphics,graph,visualization,Language Agnostic,Graphics,Graph,Visualization,我有一个对象列表(可能不超过100个),其中每个对象与所有其他对象都有距离。这个距离仅仅是这些对象共享的所有场之间增加的绝对差。可能有几个(一个)或多个(几十个)字段,因此距离的维度并不重要 我想在2D图形中显示这些点,这样距离很小的对象看起来很近。我希望这能清楚地表明整个名单中有多少个小组。很明显,这个图形的轴是没有意义的(我甚至不确定“图形”是不是正确的词) 将距离网络转换为二维点分布的好算法是什么?理想情况下,我希望对距离网络进行一个小的更改,从而在图形中产生一个小的更改,这样,随着时间的

我有一个对象列表(可能不超过100个),其中每个对象与所有其他对象都有距离。这个距离仅仅是这些对象共享的所有场之间增加的绝对差。可能有几个(一个)或多个(几十个)字段,因此距离的维度并不重要

我想在2D图形中显示这些点,这样距离很小的对象看起来很近。我希望这能清楚地表明整个名单中有多少个小组。很明显,这个图形的轴是没有意义的(我甚至不确定“图形”是不是正确的词)

将距离网络转换为二维点分布的好算法是什么?理想情况下,我希望对距离网络进行一个小的更改,从而在图形中产生一个小的更改,这样,随着时间的推移,可以将增量进度视为平滑的更改

我举了一个小例子来说明我想要的结果:

非常感谢您的任何想法, 大卫


编辑: 事实上,它似乎起了作用。我将整个值集视为二维粒子云,基于反向距离构建所有粒子之间的平方反斥力和线性吸引力。这不是一个稳定的算法,每当执行额外的迭代时,结果往往会剧烈旋转,但它似乎总是能很好地将图像分割成视觉簇:


如果有人感兴趣,我可以发布C#代码(遗憾的是,有很多C#代码)

包含了解决这个问题的几种不同方法的实现;考虑使用其Spring模型图形布局工具作为解决方案的基础。或者,它的网站包含了相关的理论。

你可能想在谷歌上搜索以下术语:

  • 自动图形布局;及
  • 基于力的算法
GraphViz确实实现了其中一些算法,但不确定它是否包含对您有用的算法


需要注意的是,对于某些算法,对图形内容的微小更改可能会导致图形发生非常大的更改。

前面的答案可能会有所帮助,但不幸的是,根据您对问题的描述,不能保证有解决方案,事实上大多数情况下不会

我认为你需要仔细阅读一下聚类分析,因为有一些算法可以根据相关性度量将你的点分类成簇,然后你可以使用graphviz或类似的东西来绘制结果


我非常喜欢的一个是“最小切割分割算法”,请参见此处:

感谢moonshadow,这是一个很好的起点。我现在还没有把这个作为答案,因为我希望有更多的链接。@Andrew,哦,天哪,这看起来太复杂了。我预计在不久的将来会有一些关于聚类算法的进一步尝试,所以感谢您提供这些链接,不过我认为这个问题已经通过一个简单的弹簧充电系统解决了。它在小数据集和大数据集上都能很好地工作,我可以运行大约500次迭代,并且仍然可以实时得到结果。好的,如果这能给出令人满意的结果,那当然很简单。