Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dot graph language - how to make bidirectional edges automatically?

Here is a very simplified example of my Dot graph:

strict digraph graphName {
A->B
B->A
}

This creates alt text

Instead I want a single edge shown between A and B but with a double arrow head. I know how to get the double arrowhead as a global option:

strict digraph graphName {
  edge [dir="both"]
A->B
B->A
}

But that looks very ugly, and not all of my edges should be dual headed.

alt text

If I do more processing of the graph and detect the double reference myself and replace the two edges with a single edge, it looks OK. But I'd rather not have to do this extra step

strict digraph graphName {
A->B [dir="both"]
}

alt text

Any better solutions?

like image 298
I82Much Avatar asked Aug 11 '10 20:08

I82Much


2 Answers

You should just use:

A -> B [dir=both]
like image 56
user2598811 Avatar answered Nov 16 '22 01:11

user2598811


How about 'concentrate=true'?:

strict digraph graphName {
concentrate=true
A->B
B->A
}

with concentrate=true

From the documentation:

If true, use edge concentrators. This merges multiedges into a single edge and causes partially parallel edges to share part of their paths. The latter feature is not yet available outside of dot.

like image 81
spenthil Avatar answered Nov 16 '22 02:11

spenthil