【发布时间】:2011-12-16 21:38:24
【问题描述】:
我想用点实现以下模型:
到目前为止,我有这么多:
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 |整洁 -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"];
}
【问题讨论】:
-
您知道有专门的软件可以做到这一点,不是吗?在 Ubuntu 软件中心搜索“电路”会产生 13 个结果,其中大约 4 个似乎适合该工作。然后是inkscape,dia,Skencil,Xara Xtreme,在更一般的矢量图部门;如果您需要动态生成东西,请考虑使用带有
pySVG和类似功能的python -
我必须动态地做,所以我只知道点。不过,我会检查一下 pySVG 看看是否能解决问题!谢谢!
-
好的,我们很乐意处理可能出现的任何其他问题。如果我的信息最终对您有所帮助,我将不胜感激。
-
因为 pySVG,我支持了你的。不要认为我需要使用它,但很好的提示。另一个是 Tikz,它看起来很强大。
-
它报告警告:正交边缘当前不处理边缘标签。尝试使用 xlabels,这是什么问题?谢谢!
标签: graphviz dot graph-layout