【问题标题】:Suggested Tools for Visualizing a Subgraph DAG可视化子图 DAG 的建议工具
【发布时间】:2020-11-24 06:12:43
【问题描述】:

我正在编写一个基本上处理子图 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 边之间的交叉点最小化。

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

【问题讨论】:

    标签: graph visualization graphviz directed-acyclic-graphs


    【解决方案1】:

    如果我了解您的要求,我认为这个 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] 
    }
    

    这是输出:

    【讨论】:

    • 感谢您的回复。我实际上是使用类似的方法以点格式呈现子图 DAG,即使用clustercompound=trueltaillhead。我的和你的区别在于用于 DAG 边的节点,即在此示例中您使用 AcBa 而我总是使用子图的第一个顶点(即 ?a)连接 DAG 节点.这种差异应该是问题所在。
    • 小注:使用dot - graphviz version 2.38.0 (20140413.2041)(在Windows上)我得到一个图像,其中顶部块向左移动了一点并且不完全高于底部块(在输入示例时也会发生同样的情况: webgraphviz.com)。当使用dot - graphviz version 2.40.1 (20161225.0304)(在cygwin上)时,结果就像答案中的图像。
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2010-11-29
    相关资源
    最近更新 更多