mousomer
mousomer

Reputation: 2858

how to control edge placements and labels in dot (graphviz)

I have trouble controlling the layout of graphviz. Trying to produce a simple automaton. The source:

digraph mygraph {
rankdir=LR;
size="13,13"
node [shape = circle];
init   -> Ready  [ label = "" ];

Ready -> P1  [ label = "t<T\n----TexT----" ];
P1  -> Ready [ label = "t>T" ];
P1  -> B1    [ label = "t<T" ];
B1  -> P1    [ label = "----TexT----" ];
B1  -> U1    [ label = "----TexT----" ];

Ready -> P2  [ label = "t<T\n----TexT----" ];
P2 -> Ready  [ label = "t>T" ];
P2 -> B2     [ label = "t<T" ];
B2 -> P2     [ label = "----TexT----" ];
B2 -> U2     [ label = "----TexT----" ];


U1  -> Ready [ label = "----TexT----", constraint=false];
U2  -> Ready [ label = "----TexT----", constraint=false];

P1 -> P2 [ label = "t<T\n----TexT----", constraint=false];
P2 -> P1 [ label = "t<T\n----TexT----", constraint=false];
}

trouble is, the labels are intertwined. I probably need: 1. larger spacing 2. move some of the edges up 3. control label placings

how do I do it? graph.png

Upvotes: 1

Views: 3113

Answers (1)

user29887
user29887

Reputation: 21

Since the conflict occurs on vertical edges going in opposite directions between nodes placed by dot on the same rank (P1 & P2) you could use vertical rank direction (drop the "rankdir=LR" line) so that the labels for theses specific edges are placed one below the other rather than side by side.

Granted, it's not a universal cure for this sort of issues but should help here without unnecessarily bloating the graph (which increasing node separation via "nodesep" would do).

Upvotes: 2

Related Questions