graphviz / dot:两个节点之间的距离可以单独设置吗?

时间:2014-03-04 09:35:21

标签: graphviz dot flowchart

我正在尝试使用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 ;
    }
}

1 个答案:

答案 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 ;
    }
}