Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing edge direction in dot

Tags:

graphviz

dot

I'm trying to draw a pretty simple diagram in dot.

digraph untitled     {     rankdir = LR;     {rank=same; S; A}     B -> A;     B -> S;     A -> A;     S -> S;     A -> S ;     S -> A;     A -> T;     S -> T; } 

The results I get is

enter image description here

I really have to change the edge from S -> S, but I would also like to change the orientation of the arrows so they loop from left to right.

like image 297
JoFrhwld Avatar asked Mar 24 '11 19:03

JoFrhwld


2 Answers

To change the orientation of any arrow, you may simply use dir=back:

S -> S [dir=back]; 

But in your case this doesn't seem to be necessary... (see below)

Because of the overlap between the edge S -> S and the A -> S and S -> A edges, I suggest to use only one edge between S and A with an arrowhead on both ends:

digraph g {     rankdir = LR;     {rank=same; S; A}     B -> A -> T;     B -> S -> T;     A -> A;     S -> S;     A -> S[dir=both]; } 

graphviz output

like image 55
marapet Avatar answered Sep 29 '22 08:09

marapet


I don't know if it is possible to make the arrows loop from left to right. You can exercise a degree of control on the arrows by the use of the dir option eg

S->S[dir=both]; 

In addition you can influence the layout by changing the length of the link from S to S. You can also control the directions of (non-self referential) arrows by reversing the order the nodes are listed eg:

S->T; becomes T->S; 

I have found that it nearly always produces better diagrams, the less it is constrained. I would suggest experimenting with removing the rank=same command.

like image 22
Chris Walton Avatar answered Sep 29 '22 07:09

Chris Walton