我有digraph许多独立和简单subgraphs的各种尺寸.dot水平放置所有这些子图,所以我最终得到一个40000x200输出文件,例如:
G1 G2 G3 G.....4 G5
Run Code Online (Sandbox Code Playgroud)
我如何告诉dot在两个维度中布局这些子图以获得类似的东西:
G1 G2 G3
G.....4
G5
Run Code Online (Sandbox Code Playgroud)
谢谢.
mar*_*pet 53
实现这一目标的步骤使用多个graphviz工具,这些工具可以通过管道连接在一起.
以下行是可能的配置,graph.dot是包含图表的文件.你可能不得不摆弄这些选择.
ccomps -x graph.dot | dot | gvpack -array3 | neato -Tpng -n2 -o graph.png
Run Code Online (Sandbox Code Playgroud)
这是解释:
工具:ccomps
将图分解为其连接的组件
的-x选项(只有所连接的部件被印刷,作为单独的曲线图)可能是所有需要.
工具:点
每个有向图都是逐个布局的.获取节点和边的位置需要此步骤.
工具:gvpack
读取图形流,将图形组合成单个布局,并生成单个图形作为输入图形的并集.
您应该阅读此工具的选项文档并使用选项.例如,-array用于以类似网格的方式布置图形,并提供几个标志来控制布局.
工具: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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:在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;
}
Run Code Online (Sandbox Code Playgroud)
可以使用转换
dot graph.dot | gvpack -array_u | neato -Tpng -n2 -o graph.png
Run Code Online (Sandbox Code Playgroud)
导致

| 归档时间: |
|
| 查看次数: |
12813 次 |
| 最近记录: |