graph - 可视化具有大约 500 个节点的二分图

标签 graph visualization graphviz dot

我需要画一个二分图。它有大约 500 个节点。

目前我正在尝试使用 graphviz 来完成它。 该图有两种类型的节点。我希望第一种类型位于左侧,另一个节点位于图的右侧。如果我用 dot 做简单的绘图,那么它就是两行节点的细条。这些行彼此靠得太近,因此很难识别节点之间的任何单独边缘。我尝试了其他布局算法,例如 circo。我喜欢节点在一个圆上,但我不知道如何拆分左右半圆上的节点。

接下来是我想要的完美输出:节点沿着一个圆展开,但两种类型的节点属于不同的半圆。我有办法使用图形可视化来做到这一点吗?

如果在 graphviz 中做起来太难,您会推荐一个更好的工具吗?

最佳答案

您可以使用 ranksep 属性增加 dot 中的行间距。为了将图的两半分开,创建两个具有固定位置的隐藏节点 (style=invis),然后连接(使用 style=invis 边)可能是有意义的每个“真实”节点到图的一半的固定节点。您可能希望为此使用 neato,可能将 overlap=false 作为图形属性。这是一个简单的示例(使用不可见样式来显示布局的外观):

graph test {
  overlap=false; splines=true
  edge [style=dotted, weight=10, len=.2]
  subgraph cluster_left {
    left [pos="-1,0!", color=red /* , style=invis */]
    a -- left
    b -- left
  }
  subgraph cluster_right {
    right [pos="1,0!", color=blue /* , style=invis */]
    c -- right
    d -- right
    e -- right
  }
  edge [style="", weight=1, len=1]
  a -- b
  b -- d
  d -- e
  c -- e
  b -- e
}

对于半圆,在第一个 edge 行中设置 weight=1000, len=1 并使用 fdp 而不是 neato 似乎产生了一些接近的东西(仍然有一些节点的边长略有偏差)。您需要更多节点才能看到效果(我放入了额外的节点,例如 be 但在它们的名称上带有数字后缀以进行测试)。

关于graph - 可视化具有大约 500 个节点的二分图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847063/

相关文章:

gcc - 如何将 gcc 生成的抽象语法树转储到 .dot 文件中?

graphviz - 将集群置于 Graphviz 中的同一等级

algorithm - 了解 Dijkstra 算法的时间复杂度计算

python - Graphviz 重叠边缘标签

python - 当我在 pycharm 中运行 '' 'sns.histplot(df ['price' ] )'' ' 时,我得到代码输出,但没有图表,这是为什么?

python - 如何可视化多维数据上的 kmeans 聚类

json - Google 饼图未显示任何切片,但显示其他切片

javascript - 隐藏标签 x 轴但仍保留垂直轴 jquery flot

Flash关系图

coffeescript - 可视化 LALR 语法