【问题标题】:Better layout of nodes for block diagrams in dot点中框图的节点布局更好
【发布时间】:2011-12-23 23:24:53
【问题描述】:

在上一个问题 (Block diagram layout with dot/Graphviz) 之后,我还有其他问题。下面是这样编译的:

dot -Gsplines=none test.gv |整洁 -n -Gsplines=ortho -Tpng -otest.png

digraph G {
    graph [rankdir = LR];

    node[shape=record, style=filled];

bar[label="Bar", height=1.3636363636363635];
tea[label="Tea", height=1.3636363636363635];
brew[label="Brew", height=3.6363636363636362];
bar1[label="Bar1", height=2.2727272727272725];
baz[label="Baz", height=1];
foo[label="Foo", height=5.0];
darjeeling[label="Darjeeling", height=3.1818181818181817];
example[label="Example", height=17.727272727272727];

bar -> example [label="bar_clk"];
bar -> example [label="bar_bar"];
example -> tea [label="bli1"];
example -> tea [label="blo2"];
example -> tea [label="blo3"];
example -> brew [label="bli"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
bar1 -> example [label="bar1_foo"];
bar1 -> example [label="bar1_bar"];
bar1 -> example [label="bar1_baz"];
bar1 -> example [label="bar1_baz1"];
bar1 -> example [label="bar1_bar2"];
baz -> example [label="baz_foo"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> bar [label="blu"];
example -> baz [label="ble"];
darjeeling -> example [label="darjeeling_bli1"];
darjeeling -> example [label="darjeeling_blo2"];
darjeeling -> example [label="darjeeling_blo3"];
darjeeling -> example [label="darjeeling_bli1"];
darjeeling -> example [label="darjeeling_blo2"];
example -> darjeeling [label="bla"];
darjeeling -> example [label="darjeeling_blo3"];
}

我的问题是如何获取 Baz 和 Darjeeling 节点并将它们移动到左侧以降低中间节点的高度。我不知道是什么决定了这一点。我知道这是一个有向图,所以图表的一般“流程”是从左到右的,我只是想要更多的控制。

这些图表将自动生成,因此最好解释一下如何按我的意愿布置它以及为什么,而不是让它适用于这个特定示例的代码 sn-p。

【问题讨论】:

    标签: graphviz dot graph-layout


    【解决方案1】:

    几点:

    我如何将 Baz 和 Darjeeling 节点移到左侧

    通过为从 ExampleBazDarjeeling 的边设置 constraint=false,或者通过将所有节点分组以显示在示例在带有rank=min 的子图中。

    您可能会说这不是一个合适的解决方案(至少不是带有constraint=false 的解决方案),因为

    这些图表会自动生成

    我完全理解(去过很多次)-但同时,你希望

    降低中间节点的高度

    这是手动设置的,所以图表还没有完全自动生成(你如何计算示例所需的高度?)。

    我不知道是什么决定的

    我也不完全确定 - Baz 还不如在左边。

    令人惊讶的是,节点的出现顺序在某些情况下会改变布局。例如,如果您将大吉岭节点的定义向上移动,它将出现在左侧(而 Bar 将出现在右侧)。


    编辑:代码 sn-p...

    第三种可能性是按顺序(自上而下/从左至右)定义所有边,并用dir=back装饰返回的边。

    如果你改变这 3 行

    example -> bar [label="blu"];
    example -> baz [label="ble"];
    example -> darjeeling [label="bla"];
    

    进入

    bar -> example [label="blu", dir=back];
    baz -> example [label="ble", dir=back];
    darjeeling -> example [label="bla", dir=back];
    

    进入

    example -> bar [label="blu", constraint=false];
    example -> baz [label="ble", constraint=false];
    example -> darjeeling [label="bla", constraint=false];
    

    (并改变example的高度)

    你会得到

    【讨论】:

    • 感谢您的回答。子图可能会起作用。我也可以在那里放一些约束=假的东西,只需要玩一些。现在根据它的边数计算高度;不过这很容易改变。我知道改变顺序,但没有让双方更加平衡。将使用子图和报告,谢谢!
    • 抱歉,回答迟了。这看起来很有希望,所以这是公认的答案!
    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2016-07-04
    • 2019-09-09
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多