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

lin*_*and 6 dot flowchart graphviz

我正在尝试使用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 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我应该注释掉导致不良结果的线而不是导致所需结果的线(我原本计划附加两个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 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 8

有一些"图形"属性可以控制您的需求.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 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它是如何回答这个问题的? (2认同)