我有以下图表:
如您所见,有两个自然集群。我想找出一种方法将这些集群分成两个图表。
当然,关键步骤是计算正确的拆分。我想插入两个节点 n1 和 n2,链接它们 e(n1,n2),然后移动它们,最大限度地减少边缘交叉的数量(当然将所有节点/边缘固定在它们所在的位置)。
任何人都可以在这里提供任何帮助吗?我认为graphviz 没有任何东西可以让我做到这一点。
我有以下图表:
如您所见,有两个自然集群。我想找出一种方法将这些集群分成两个图表。
当然,关键步骤是计算正确的拆分。我想插入两个节点 n1 和 n2,链接它们 e(n1,n2),然后移动它们,最大限度地减少边缘交叉的数量(当然将所有节点/边缘固定在它们所在的位置)。
任何人都可以在这里提供任何帮助吗?我认为graphviz 没有任何东西可以让我做到这一点。
我认为您在这里混合了两个不同的任务:一个是图表分析,另一个是相同的可视化。
Graphviz,顾名思义,是一种图形可视化工具。可视化可以采取多种形式,通常是通过让这些节点彼此靠近并相互连接来“让它看起来不错”,从而减少视觉边缘长度。可以利用一些弹簧或重力模型来计算所有节点的最佳位置。其他选项包括圆形或外壳布局。
某种可视化不应该是分析图表的基础。图属性,如平均最短路径长度或聚类系数,独立于任何可视化。
你说你想“最小化边缘交叉的数量”。边缘交叉的数量是可视化的属性,而不是图形的属性!每次让 graphviz 计算布局时,它可能会发生变化,即使图形没有变化。谁说 2d 是您的图形的唯一可能表示形式?只添加一个维度,您将不会有任何边缘交叉。
我建议专注于图形分析。我不知道你是否知道NetworkX。他们有几十种算法来分析你的图表。也许您对 聚类和集团部分感兴趣。