用于可视化子图 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 的结构。如果
就好了
- 对于 DAG 边
A->B
,节点 A
位于节点 B
上方。 (graphviz
现在将所有 DAG 节点放在同一行)
- 正确放置节点,使 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]
}
这是输出:
我正在编写一个基本上处理子图 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 的结构。如果
- 对于 DAG 边
A->B
,节点A
位于节点B
上方。 (graphviz
现在将所有 DAG 节点放在同一行) - 正确放置节点,使 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]
}
这是输出: