我正在尝试强制节点的位置。我有节点的x和y坐标,这也是一个有向图。我可以使用rank=same来处理行(y坐标),但无法弄清楚如何处理列(x坐标)。
我正在尝试强制节点的位置。我有节点的x和y坐标,这也是一个有向图。我可以使用rank=same来处理行(y坐标),但无法弄清楚如何处理列(x坐标)。
你可以使用pos属性(https://www.graphviz.org/doc/info/attrs.html#d:pos),例如:
xxx [
label = xxx
pos = "0,0!"
]
yyy [
label = yyy
pos = "10,10!"
]
你还需要指定neato
或fdp
布局引擎,这样dot
命令行就会是(对于fdp):
dot -Kfdp -n -Tpng -o sample.png sample.dot
这里有一个我找到的例子: https://observablehq.com/@magjac/placing-graphviz-nodes-in-fixed-positions
实质上,“pos”位置属性可以为节点指定位置。只适用于neato或fdp布局引擎,不适用于dot。
!
表示该位置是输入,不应被改变。
我无法让-n
标志与dot -Kfdp
一起工作。
但是,我能够使用以下命令使其与neato一起工作:
neato sample.dot -n -Tpng -o sample.png
neato -n sample.dot ...
(而不是fdp)才能使其工作。 - Arviddot
并覆盖布局引擎对于不了解其工作原理的人来说非常令人困惑,而且没有任何好处。文档明确提到:"-K
指定要使用哪个默认布局算法,覆盖命令名称中的默认算法。例如,运行 dot -Kneato 等同于运行 neato。" - AnnanFay