11

我有一个图表(组织图)如何:

digraph G {
nodesep=0.3;
ranksep=0.2;
margin=0.1;
node [shape=rectangle];
edge [arrowsize=0.8];
1 -> 2;
1 -> 3;
1 -> 4;
1 -> 5;
1 -> 6;
1 -> 7;
1 -> 8;
1 -> 9;
1 -> 10;
}

在此处输入图像描述

我有 70 人的组织图,用 A4 打印是不可能的。我如何将节点放在 2 或 3 行中?

4

1 回答 1

19

这里有两种可能性(另见这个问题):

1.使用unflatten实用程序

Graphviz 提供了一个名为unflatten. 如果您使用此命令行预处理图形:

unflatten -l 3 wide.gv | dot -Tpng -o wide.png

输出图像将类似于下图。这稍微不那么宽,您可以使用该-l选项。

graphviz 未展平图示例

2. 使用 `rank=same' 和不可见的边缘

您可以使用标准技术使自动布局的图形看起来更像您想要的:

  • rank=same对子图中的节点进行分组并定义哪些节点应位于同一行
  • 不可见边,以确保不同的子图出现在不同的等级上
  • 也许有些constraint=false边缘会影响布局
  • group节点的属性以鼓励直边。

输出图不一定会更漂亮......

这是一个例子,你可能会做得更好。此外,如果图形是动态生成的,这可能不是很实用。

digraph G {
nodesep=0.3;
ranksep=0.2;
margin=0.1;
node [shape=rectangle];
edge [arrowsize=0.8];


edge[style=invis];
node[group=a];
2->5->8;
node[group=b];
1->3->6->9;
node[group=c];
4->7->10;


edge[style=solid];
1 -> 2;
1 -> 3;
1 -> 4;
edge[constraint=false];
1 -> 5;
1 -> 6;
1 -> 7;
1 -> 8;
1 -> 9;
1 -> 10;
}

图形输出

于 2012-06-21T10:46:59.347 回答