Graphviz:如何插入两个新的链接节点并最小化边缘交叉?
Posted
技术标签:
【中文标题】Graphviz:如何插入两个新的链接节点并最小化边缘交叉?【英文标题】:Graphviz: how to insert two new linked nodes and minimize edge crossings? 【发布时间】:2012-10-23 16:17:51 【问题描述】:我有以下图表:
如您所见,有两个自然集群。我想找出一种方法将这些集群分成两个图表。
当然,关键步骤是计算正确的拆分。我想插入两个节点 n1 和 n2,链接它们 e(n1,n2),然后移动它们,最大限度地减少边缘交叉的数量(当然将所有节点/边缘固定在它们所在的位置)。
有人可以在这里提供任何帮助吗?我不认为 graphviz 有任何东西可以让我做到这一点。
【问题讨论】:
+1 只是为了令人印象深刻的形象 :) 1.获取 88 个国家/地区的透明国际数据; 2.创建国家之间的距离矩阵;创建完整的图表。 3. 一个星球,两个不同的世界。 只是要清楚...您是否已经知道图形的聚类,您的问题是如何让 graphviz 更干净地布局图形,或者您的第一个问题是(算法上)找到聚类然后假设graphviz会产生更干净的布局? 我想自动化这些集群的发现,并递归地查看每个集群。问题是 graphviz 没有为我提供一种查看加权边缘交叉点的方法。 我多次阅读您的问题,但我不明白您在寻找什么:您想要两个单独的图表吗?还是一张图有两个集群?为什么你想要新的节点?如果你正在修复它们现在所在的节点/边缘 - 应该改变什么? 【参考方案1】:我认为您在这里混合了两个不同的任务:一个是图表的分析,另一个是相同的可视化。
Graphviz,顾名思义,是一种图形可视化工具。可视化可以采用多种形式,通常是通过让这些节点彼此靠近并相互连接来“让它看起来不错”,从而减少 visual 边的长度。可以利用一些弹簧或重力模型来计算所有节点的最佳位置。其他选项包括圆形或外壳布局。
某种可视化不应该是分析图表的基础。图属性,如平均最短路径长度或聚类系数,独立于任何可视化。
你说你想“最小化边缘交叉的数量”。边缘交叉的数量是可视化的属性,而不是图形的属性!每次让 graphviz 计算布局时,它可能会发生变化,即使图形没有变化。谁说 2d 是您的图形的唯一可能表示形式?只添加一个维度,就不会出现任何边缘交叉。
我建议专注于图形分析。我不知道你是否知道NetworkX。他们有几十个Algorithms 来分析您的图表。您可能对 clustering 和 clique 部分感兴趣。
【讨论】:
以上是关于Graphviz:如何插入两个新的链接节点并最小化边缘交叉?的主要内容,如果未能解决你的问题,请参考以下文章