84

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?

Dan Rosenstark
  • 64,546
  • 54
  • 267
  • 405
I82Much
  • 25,421
  • 13
  • 84
  • 117

2 Answers2

107

You should just use:

A -> B [dir=both]
Dan Rosenstark
  • 64,546
  • 54
  • 267
  • 405
user2598811
  • 1,071
  • 1
  • 7
  • 3
71

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.

Jon Clements
  • 124,071
  • 31
  • 219
  • 256
spenthil
  • 3,077
  • 24
  • 17
  • Works with a label for me, and I'm running an older version. – Aaron Hall Apr 25 '14 at 19:59
  • 1
    If it helps... this didn't work for me, in so much as it coalesced the edges, but only put a single arrow on the end. Then I tried to "strict digraph"... and it works perfectly then. – philw Mar 19 '15 at 13:48
  • This is silly but it's what the OP wanted, so big up! – Dan Rosenstark Nov 21 '19 at 23:22
  • @philw It does not work for me either, I get edges with a single arrowhead only. I am using pygraphviz, and I tried `pgv.AGraph(directed=True, strict=True)`, but it does not work either, i get two edges again... Any suggestions? – Tropilio Apr 28 '20 at 15:40