我想用dot实现以下模型:
到目前为止,我有这么多:
digraph G {
graph [rankdir = LR, splines=ortho]
unit [shape=box, width = 2, height = 10];
more_different_unit [shape=box, height=4];
other_unit [shape=box, height=4];
unit -> other_unit [label = "foo"];
unit -> other_unit [label = "bar"];
unit -> other_unit [label = "bar"];
unit -> other_unit [label = "bar"];
unit -> other_unit [label = "bar"];
unit -> other_unit [label = "bar"];
unit -> more_different_unit [label = "bar"];
unit -> more_different_unit [label = "bar"];
unit -> more_different_unit [label = "bar"];
unit -> more_different_unit [label = "bar"];
unit -> more_different_unit [label = "bar"];
unit -> more_different_unit [label = "bar"];
}
我这样编译它:
dot -Gsplines = none test.gv | neato -n -Gsplines = ortho -Tpng -otest.png
这让我很接近,但有一些我想知道的事情 .
-
如何在Foo的左侧和右侧获得块,而不仅仅是右侧?我还没弄清楚 .
-
是否可以将边缘标签一直放在边缘上方或下方?
-
如何将右侧节点对齐,左侧节点对齐?一种可能性是使它们具有相同的宽度,这是可以的 .
谢谢!!
更新:
基于已接受的答案,我现在正在做以下事情,这正是我所需要的,再次通过点线传输到neato,如上所述:
digraph G {
graph [rankdir = LR, splines=ortho];
node[shape=record];
Bar[label="Bar", height=2];
Foo[label="Foo", height=4];
Bew[label="Bew", height=2];
Gate[label="Gate", height=2];
Bar -> Foo [label="Bar2Foo"];
Bar -> Foo [label="Bar2Foo"];
Bar -> Foo [label="Bar2Foo"];
Foo -> Bew [label="Foo2Bew"];
Foo -> Bew [label="Foo2Bew"];
Bew -> Foo [label="Bew2Foo"];
Foo -> Gate [label="Foo2Gate"];
Foo -> Gate [label="Foo2Gate"];
}
1 回答
这会让你入门吗?
请注意,我使用不间断的空格作为一种厚颜无耻的方式来获得对齐(我想,我在vim中做了C-kSpaceSpace,导致Hex
00a0
char)您还可以在标签定义中使用HTML,这样您就可以使用字体,颜色并创建'spacers':http://www.graphviz.org/doc/info/shapes.html#html
我认为使用HTML节点对齐标签会更容易 .