用于可视化子图 DAG 的建议工具

Suggested Tools for Visualizing a Subgraph DAG

我正在编写一个基本上处理子图 DAG 的程序,即该图是一个有向无环图,图中的每个节点都是一个子图。例如,对于DAG中的边A->B,节点A是三角形的子图,节点B是四团的子图。边A->B表示通过添加一个子图顶点和三个子图边从三角形扩展到四团。

 +=======+        +=======+
 | a---b |        | a---b |
 | |  /  |        | |\ /| |
 | | /   | =====> | | X | |
 | |/    |        | |/ \| |
 | c     |        | c---d |
 +=======+        +=======+
     A                B  

出于多种目的,我想可视化这个子图DAG,即可视化可以显示DAG的整个结构,同时显示所有节点的子图。另外如果能显示顶点和边的属性就更好了

我能够以任何格式列出 DAG 的所有节点和边以及所有节点的子图。但我不知道什么工具最适合这种可视化。我通过将子图 DAG 导出为 dot 格式并使用 graphviz 将 dot 文件转换为 png 来尝试 graphviz。 graphviz 的问题在于它可以很好地显示节点的子图,但无法以人类可读的方式显示 DAG 的结构。如果

就好了
  1. 对于 DAG 边 A->B,节点 A 位于节点 B 上方。 (graphviz 现在将所有 DAG 节点放在同一行)
  2. 正确放置节点,使 DAG 边之间的交集最小化。

还有其他选择吗?提前致谢!

如果我了解您的要求,我认为这个 dot 程序非常接近:

digraph dag {
  compound=true  // needed for A->B edge (kludge, but documented)
  edge [dir=none]  // no arrowheads
  subgraph clusterA{
   labelloc=b
   label="A"
   Aa -> Ab // [constraint=false]  // keep on same rank
   Ab -> Ac
   Aa -> Ac
   {
   rank=same
   Aa [label="a"]
   Ab [label="b"]
   }
   Ac [label="c"]
}
  subgraph clusterB{
   labelloc=b
   label="B"
   Ba -> Bb // [constraint=false]  // keep on same rank
   Bc -> Bd // [constraint=false]  // keep on same rank
   Bb -> Bc
   Ba -> Bc
   Bb -> Bd
   Ba -> Bd
   {
   rank=same
   Ba [label="a"]
   Bb [label="b"]
   }
   {
   rank=same
   Bc [label="c"]
   Bd [label="d"]
   }
}
Ac -> Ba [dir=forward ltail=clusterA lhead=clusterB  minlen=2] 
}

这是输出: