点中框图的节点布局更好
Posted
技术标签:
【中文标题】点中框图的节点布局更好【英文标题】: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。
【问题讨论】:
【参考方案1】:几点:
我如何将 Baz 和 Darjeeling 节点移到左侧
通过为从 Example 到 Baz 和 Darjeeling 的边设置 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
的高度)
你会得到
【讨论】:
感谢您的回答。子图可能会起作用。我也可以在那里放一些约束=假的东西,只需要玩一些。现在根据它的边数计算高度;不过这很容易改变。我知道改变顺序,但没有让双方更加平衡。将使用子图和报告,谢谢! 抱歉,回答迟了。这看起来很有希望,所以这是公认的答案!以上是关于点中框图的节点布局更好的主要内容,如果未能解决你的问题,请参考以下文章