Changing edge direction in dot

2020-08-09 07:30发布

问题:

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

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.

回答1:

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];
}



回答2:

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.



标签: graphviz dot