我正在尝试使用dot(版本2.28.0)来制作源代码的流程图。为此,我希望图形由子图组成,其中每个子图表示代码库中的源文件。在每个子图的顶部,应该以视觉上容易区分的方式(即深蓝色背景上的粗体,白色文本)将文件名作为节点。文件名节点下面应该是按照调用顺序表示该文件中的例程流的节点。
我现在的问题是我希望“文件名节点”和“例程节点”之间的距离小于各个“例程节点”之间的距离,而且,之间不应该有箭头。
我尝试将minlen属性用于将“文件名节点”连接到第一个“例程节点”的边缘,但是当我将其设置为低于1.0的值时,这两个节点彼此相邻而不是堆叠
有没有办法让前两个节点比另外两个节点更接近,但是顶部/底部是否定向?
digraph "prog.c"
{
edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"];
node [fontname="FreeSans",fontsize="14",shape=record,height=0.2];
compound=true;
subgraph cluster_main {
Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"];
Node1_1 [label="routine1()"];
Node1_2 [label="routine2()"];
edge [color="transparent", minlen="0.5"]; // stacking not ok
// edge [color="transparent", minlen="1.0"]; // stacking ok
Node1_0 -> Node1_1 ;
edge [color="black", minlen="1.0"];
Node1_1 -> Node1_2 ;
}
}
编辑:我应该注释掉导致不良结果的那一行,而不是导致所需结果的那一行(我原本打算附上两个png进行澄清,但我不允许这样做作为新手);所以这里是我实际想要修改的代码,前两个节点的距离与最后两个节点的距离不同(较小)。
digraph "prog.c"
{
edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"];
node [fontname="FreeSans",fontsize="14",shape=record,height=0.2];
compound=true;
subgraph cluster_main {
Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"];
Node1_1 [label="routine1()"];
Node1_2 [label="routine2()"];
//edge [color="transparent", minlen="0.5"]; // stacking not ok
edge [color="transparent", minlen="1.0"]; // stacking ok
Node1_0 -> Node1_1 ;
edge [color="black", minlen="1.0"];
Node1_1 -> Node1_2 ;
}
}
答案 0 :(得分:7)
有几个" graph"可以控制您需要的属性。 pad,ranksep,nodesep
另外,我增加了你的节点大小,但仅限于我自己的易用性......
digraph "prog.c"
{
graph [pad=".75", ranksep="0.25", nodesep="0.25"];
node [fontname="FreeSans",fontsize="14",shape=record,width=2, height=.5];
edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"];
compound=true;
subgraph cluster_main {
Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"];
Node1_1 [label="routine1()"];
Node1_2 [label="routine2()"];
edge [color="transparent", minlen="0.5"]; // stacking not ok
// edge [color="transparent", minlen="1.0"]; // stacking ok
Node1_0 -> Node1_1 ;
edge [color="black", minlen="1.0"];
Node1_1 -> Node1_2 ;
}
}