【问题标题】:Graphviz: how to insert two new linked nodes and minimize edge crossings?Graphviz:如何插入两个新的链接节点并最小化边缘交叉?
【发布时间】:2012-10-23 16:17:51
【问题描述】:

我有以下图表:

如您所见,有两个自然集群。我想找出一种方法将这些集群分成两个图表。

当然,关键步骤是计算正确的拆分。我想插入两个节点 n1 和 n2,链接它们 e(n1,n2),然后移动它们,最大限度地减少边缘交叉的数量(当然将所有节点/边缘固定在它们所在的位置)。

有人可以在这里提供任何帮助吗?我不认为 graphviz 有任何东西可以让我做到这一点。

【问题讨论】:

  • +1 只是为了令人印象深刻的形象 :)
  • 1.获取 88 个国家/地区的透明国际数据; 2.创建国家之间的距离矩阵;创建完整的图表。 3. 一个星球,两个不同的世界。
  • 只是要清楚...您是否已经知道图形的聚类,您的问题是如何让 graphviz 更干净地布局图形,或者您的第一个问题是(算法上)找到聚类然后假设graphviz会产生更干净的布局?
  • 我想自动化这些集群的发现,并递归地查看每个集群。问题是 graphviz 没有为我提供一种查看加权边缘交叉点的方法。
  • 我多次阅读您的问题,但我不明白您在寻找什么:您想要两个单独的图表吗?还是一张图有两个集群?为什么你想要新的节点?如果你正在修复它们现在所在的节点/边缘 - 应该改变什么?

标签: python graph-theory graphviz pygraphviz


【解决方案1】:

我认为您在这里混合了两个不同的任务:一个是图表的分析,另一个是相同的可视化

Graphviz,顾名思义,是一种图形可视化工具。可视化可以采用多种形式,通常是通过让这些节点彼此靠近并相互连接来“让它看起来不错”,从而减少 visual 边的长度。可以利用一些弹簧或重力模型来计算所有节点的最佳位置。其他选项包括圆形或外壳布局。

某种可视化不应该是分析图表的基础。图属性,如平均最短路径长度或聚类系数,独立于任何可视化。

你说你想“最小化边缘交叉的数量”。边缘交叉的数量是可视化的属性,而不是图形的属性!每次让 graphviz 计算布局时,它可能会发生变化,即使图形没有变化。谁说 2d 是您的图形的唯一可能表示形式?只添加一个维度,就不会出现任何边缘交叉。

我建议专注于图形分析。我不知道你是否知道NetworkX。他们有几十个Algorithms 来分析您的图表。您可能对 clusteringclique 部分感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2016-12-12
    相关资源
    最近更新 更多