gpt4 book ai didi

graphviz - 如何在点中控制子图的布局?

转载 作者:行者123 更新时间:2023-12-03 08:55:06 27 4
gpt4 key购买 nike

我有一个digraph,由许多大小不同的独立且简单的subgraphs组成。 dot将所有这些子图水平放置,因此我得到一个40000x200的输出文件,例如:

G1 G2 G3 G.....4 G5

我如何告诉 dot在两个维度上布局这些子图以获得类似内容:
G1 G2 G3
G.....4
G5

谢谢。

最佳答案

实现此目标的步骤使用多个可以通过管道连接在一起的graphviz工具

下一行是可能的配置,graph.dot是包含您的图形的文件。您可能不得不弄弄这些选项。

ccomps -x graph.dot | dot | gvpack -array3 | neato -Tpng -n2 -o graph.png

这是解释:

1.单独的断开连接图

工具: ccomps

decomposes graphs into their connected components


-x选项(仅打印连接的组件,作为单独的图形)可能只是需要的。

2.布置每个图

工具:

每个有向图都一张一张地布置。需要此步骤来获取节点和边的位置。

3.将所有布局图打包成一个

工具: gvpack

reads in a stream of graphs, combines the graphs into a single layout, and produces a single graph serving as the union of the input graphs.



您应该阅读此工具的选项文档并使用这些选项。例如, -array用于以类似于网格的方式对图形进行布局,并提供几个标志来控制布局。

4.创建输出

工具: neato

选项 -n2告诉neato不要布局输入图,而要使用现有的位置属性。

图表示例:
digraph G {
subgraph G1 {
a->{b; c;};
}
subgraph G2 {
d -> {e; f;};
}
subgraph G3 {
g -> h;
}
subgraph G4 {
i -> j;
}
subgraph G5 {
{k; l;} -> m;
}
}

编辑:对gvpack中的图进行排序

为了确定 gvpack创建的组合布局中子图的出现顺序,每个子图都需要一个 sortv属性。

例如,以下图形:
digraph G1 {
sortv=1;
a->{b; c;};
}
digraph G2 {
sortv=2;
d -> {e; f;};
}
digraph G3 {
sortv=3;
g -> h;
}
digraph G4 {
sortv=4;
i -> j;
}
digraph G5 {
sortv=5;
{k; l;} -> m;
}

可以使用
dot graph.dot | gvpack -array_u | neato -Tpng -n2 -o graph.png

导致

关于graphviz - 如何在点中控制子图的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com