【问题标题】:graphviz/dot: can the distance between two nodes be set individually?graphviz/dot:两个节点之间的距离可以单独设置吗?
【发布时间】:2014-04-05 18:04:56
【问题描述】:

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

【问题讨论】:

    标签: graphviz dot flowchart


    【解决方案1】:

    有几个“图表”属性可以控制您需要的内容。 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 ;
        }
    }
    

    【讨论】:

    • 它是如何回答问题的?
    • 抱歉,不够清晰。通过将“ranksep”增加到更大的值,例程将变得更远。
    • 我错过了问题答案的基本部分,即使它确实有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2019-03-29
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多