【问题标题】:Drawing two-dimensional point-graphs绘制二维点图
【发布时间】:2011-01-05 12:34:08
【问题描述】:

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

我想在 2D 图表中显示这些点,以便距离较近的对象靠得很近。我希望这将清楚地传达整个列表中有多少子组。显然,这个图表的坐标轴是没有意义的(我什至不确定“图表”是否是正确使用的词)。

将距离网络转换为二维点分布的好算法是什么?理想情况下,我希望对距离网络进行小幅更改,以使图形发生小幅变化,从而可以将增量进度视为随时间的平滑变化。

我已经做了一个我正在寻找的结果的小例子: Example Graphic http://en.wiki.mcneel.com/content/upload/images/GraphExample.png

非常感谢任何想法, 大卫


编辑:

它实际上似乎奏效了。我将整组值视为 2D 粒子云,构建所有粒子之间的平方反比斥力和基于反距离的线性吸引力。这不是一个稳定的算法,每当执行额外的迭代时,结果往往会剧烈旋转,但它似乎总是能很好地分离成视觉集群:

alt text http://en.wiki.mcneel.com/content/upload/images/ParticleCloudSolution.png

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

【问题讨论】:

    标签: language-agnostic graphics graph visualization


    【解决方案1】:

    Graphviz 包含解决此问题的几种不同方法的实现;考虑使用其弹簧模型图形布局工具作为解决方案的基础。或者,它的网站包含相关理论的a good collection of source material

    【讨论】:

    • 感谢moonshadow,它一个很好的起点。我还没有将此标记为答案,因为我希望有更多链接。
    【解决方案2】:

    您可能想在 Google 上搜索以下术语:

    • 自动图形布局;和
    • 基于力的算法。

    GraphViz 确实实现了其中一些算法,但不确定它是否包含任何对您有用的算法。

    一个注意事项 - 对于某些算法,对图表内容的微小更改可能会导致图表发生非常大的变化。

    【讨论】:

      【解决方案3】:

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

      我认为您需要深入了解聚类分析,因为有一些算法可以根据相关性指标将您的点分类到聚类中,然后您可以使用 graphviz 或类似的工具来绘制结果。 http://en.wikipedia.org/wiki/Cluster_analysis

      我非常喜欢一种“最小分割算法”,请参见此处:http://en.wikipedia.org/wiki/Cut_(graph_theory)

      【讨论】:

      • @Andrew,天哪,这看起来非常复杂。我预计在不久的将来会进一步尝试聚类算法,因此感谢您提供这些链接,但是我认为这个问题已经通过一个简单的弹簧充电系统解决了。它适用于小型和大型数据集,我可以运行大约 500 次迭代,结果仍然是实时的。
      • 好的,如果结果令人满意,那当然很简单。
      猜你喜欢
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2016-08-09
      • 2019-01-08
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多