1

在上一个问题(带有点/Graphviz 的框图布局)之后,我还有其他问题。以下是这样编译的:

点 -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 节点并将它们移动到左侧以降低中间节点的高度。我不知道是什么决定了这一点。我知道这是一个有向图,所以图表的一般“流程”是从左到右的,我只是想要更多的控制。

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

4

1 回答 1

2

几点:

我怎么能把 Baz 和 Darjeeling 节点移到左边

通过设置constraint=falseExampleBazDarjeeling的边,或者通过将所有节点分组以在子图中出现在Examplerank=min的左侧。

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

这些图表将自动生成

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

降低中间节点的高度

这是手动设置的,因此图形仍未完全自动生成(您如何计算示例所需的高度?)。

我不知道是什么决定了这个

我也不完全确定——巴兹也可能在左边。

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


编辑:这里是代码片段......

第三种可能性是以正确的顺序(自上而下/从左到右)定义所有边缘,并用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

你会得到

图形化结果

于 2011-11-07T22:28:03.280 回答