Graphviz如何平均分离节点(可能与nodesep)?

时间:2014-12-01 15:59:33

标签: position equals distance graphviz

我使用点制作一个图形,它分成4个平行的行,它们之间有链接(参见下面的代码)。我已经使用 rank = same 将起始节点组织成子图以确保它们在垂直方向上开始,然后使用 edge [weight] 来确保每一行都是直线水平线。

由于行之间的链接,初始节点在垂直方向上不等距。有没有办法将它们设置为相等的距离(即增加行C,D,E之间的距离以匹配B,C之间的距离)?我尝试在子图中使用 nodesep ,但没有效果。有任何想法吗?感谢

graph Example {

rankdir=LR
ordering=out

{ rank=same
b1
c1
d1
e1
}

a1--b1
a1--c1
a1--a2--d1
a2--e1

edge[weight=100]

b1--b2--b3--b4
c1--c2--c3--c4
d1--d2--d3--d4
e1--e2--e3--e4

edge[weight=1]
b1--bc--c3

}

2 个答案:

答案 0 :(得分:0)

你(我认为)试图实现的是graphviz / dot的默认行为。我想如果你删除所有"转向"在图表中,您将获得您所需要的内容。至少在下图中,节点垂直均匀地分布在每个" rank"。

graph Example {

rankdir=LR
ordering=out

a1--b1
a1--c1
a1--a2--d1
a2--e1
b1--b2--b3--b4
c1--c2--c3--c4
d1--d2--d3--d4
e1--e2--e3--e4
b1--bc--c3
}

答案 1 :(得分:0)

这可能是不可见节点(和边缘......)的情况。

只需在rank = same子图之间添加一些不可见的节点,以强制在行之间只有一个节点:

graph Example {

rankdir=LR
ordering=out

{ rank=same
    b1 [group=b]
    c1 [group=c]
    d1 [group=d]
    e1 [group=e]
    // invisible nodes
    node[style=invis]
    edge[style=invis]
    b1--i1--c1--i2--d1--i3--e1
}
node [group=b]
b1--b2--b3--b4
node [group=c]
c1--c2--c3--c4
node [group=d]
d1--d2--d3--d4
node [group=e]
e1--e2--e3--e4

node[group=""]
a1--b1
a1--c1
a1--a2--d1
a2--e1

b1--bc--c3

}

我还使用group来建议直线而不是weight