【问题标题】:Weird node placement of dot graph点图的奇怪节点放置
【发布时间】:2017-10-07 04:21:36
【问题描述】:

我有以下点图中的源代码:

digraph name {
    rankdir="LR";
    node [shape="record"];
    1 [label="OUTPUT"];
    A [label="FWD|<i>i|<r_in>r_in|<r_out>r_out|<o>o"];
    B [label="FIFO|<r_in>r_in|<o>o"];
    C [label="Cons|<i>i|<r_out>r_out|<o>o"];

    A:o:e -> C:i:w;
    C:r_out:w -> A:r_in:e;
    B:o:e -> A:i:w;
    C:o:e -> 1:w;
    A:r_out:w -> B:r_in:e;
}

它由 4 个节点组成,基本上可以按照 B -> A -> C -> OUTPUT 的顺序依次放置。如果 dot 将节点按此顺序放置,则只有很少的边会在两个节点之间交叉。

但是,像这样调用点:

dot mygraph.dot -Tpng -o mygraph.png

造成以下混乱:

编辑:看来,源中节点的顺序很重要。但是,由于源是从程序生成的,输出其内部信号流结构,我不能依靠它来将节点按正确的顺序排列。我想,dot 和它的图形布局引擎可以自己找出哪些节点是第一个节点,这样线就不会交叉。

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

    只需按所需顺序定义节点:

    digraph name {
        rankdir="LR";
        node [shape="record"];
    
        B [label="FIFO|<r_in>r_in|<o>o"];
        A [label="FWD|<i>i|<r_in>r_in|<r_out>r_out|<o>o"];
        C [label="Cons|<i>i|<r_out>r_out|<o>o"];
        1 [label="OUTPUT"];
    
        A:o:e -> C:i:w;
        C:r_out:w -> A:r_in:e;
        B:o:e -> A:i:w;
        C:o:e -> 1:w;
        A:r_out:w -> B:r_in:e;
    }
    

    产量

    【讨论】:

    • 感谢您的提示!但是,图形源是从仅输出其内部结构的程序自动生成的。它不能真正知道,首先放置哪些节点,然后放置哪个节点。我想,dot 可以自己解决这个问题吗?
    • 不,它不能。它们的定义顺序决定了节点的位置。你需要找到一种方法来调整你得到的输出......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2017-04-14
    • 2018-10-07
    • 1970-01-01
    • 2018-01-05
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多