jnn*_*nns 43 dot graphviz edge-detection
我正在使用graphviz(点)生成您可以在下面看到的图形.左下角的节点(红色椭圆)因其边缘穿过相邻节点的几个边缘而引起烦恼.有没有办法将节点放置到某个区域?
谢谢你的想法
smo*_*ris 48
您可以创建一个不可见的约束,以使红色节点出现在所有其他节点的左侧.
redNode -> leftmostNode [style=invis];
Run Code Online (Sandbox Code Playgroud)
之前:
后:
Stu*_*etz 24
@Jannis,如果你想继续在回答这个,还有就是实际控制单个节点放置的方式-使用"POS"属性:
http://www.graphviz.org/doc/info/attrs.html#d:pos
作为一个例子,你可以写:
n [pos="3,5!"];
Run Code Online (Sandbox Code Playgroud)
这会迫使节点n
处于精确状态(3,5)
.
但是,这仅适用于布局引擎"fdp"和"neato".
tjv*_*jvr 14
我喜欢@smokris的[style=invis]
技巧,说服graphviz把东西放在你想要的地方,通过添加影响布局但不可见的边缘.
另一个技巧是constraint
属性,它允许您添加可见但不影响布局的边.
如果添加新边缘[constraint=false]
会使图形混乱,请设置在该边缘上:现在,graphviz会在放置节点时忽略它.
如果
false
,边缘不用于对节点进行排名.例如,在图表中Run Code Online (Sandbox Code Playgroud)digraph G { a -> c; a -> b; b -> c [constraint=false]; }
b -> c
在秩分配期间,边缘不会添加约束,因此唯一的约束是a高于b和c,产生图形:
我不知道有任何方法可以控制各个节点的位置.它没有多大意义,因为为了做到这一点,你需要知道最终图形的样子,然而手动放置一个节点会改变图形的其余部分的呈现方式.
我通过更改.dot
文件中定义节点的顺序,并在图形级别调整nodesep
和ranksep
属性来解决此问题.这是一个细化的过程 - 一次调整一些东西,直到它看起来正确.
您也可以将图形渲染为SVG
,然后将其导入Visio(或其他编辑器)并手动重新排列您不满意的节点.