In Graphviz / dot, is it possible to get the edge to connect exactly in the top center of a node? Reading the dot guide, I thought tailport
and headport
would help me, but adding those make no difference and sometimes get me weirder results.
This is what I'm getting:
And this is what I'm looking for:
The code I used to get the (incorrect) graph is:
digraph G {
graph [splines = ortho];
node [shape = box];
edge [dir = none];
{
rank = same
A
AB [shape = point]
B
A -> AB
AB -> B
}
{
rank = same
point1 [shape = point]
point2 [shape = point]
point3 [shape = point]
}
AB -> point1
// The following section if to make the nodes appear in
// the correct order, not sure if there's a better way
{
edge [style = invisible]
rank = same
C
D
E
F
C -> D
D -> E
}
point2 -> point1
point2 -> C
point1 -> point3
point3 -> E
point1 -> D
}
Notes
splines=ortho
doesn't supporttailport
orheadport
(see: "Graphviz Issue Tracker - 0002142: ortho plots do not respect ports. also arrowheads seem to go the wrong way.")C
orF
on the example below)Image
Code
This code works even with more than 3 child nodes and it's compatible with Graphviz 2.38. Useful for Org Chart (even if it's not perfect if you have many levels - I'm still try to reduce asymmetries).
Turns out the most recent (2.38) version isn't working properly in Mac OS X Yosemite, I had to downgrade to 2.36 as noted in the download page.
I see the same effect under Windows7 - did not try other platforms.
I tried fiddling with the 'port positions', See http://www.graphviz.org/content/attrs#kportPos
e.g. changing the last lines of your code to
gives a (slightly) better positioning of the connecting lines.