97

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
  • 68,471
  • 58
  • 283
  • 421
I82Much
  • 26,901
  • 13
  • 88
  • 119

2 Answers2

126

You should just use:

A -> B [dir=both]
Dan Rosenstark
  • 68,471
  • 58
  • 283
  • 421
user2598811
  • 1,261
  • 1
  • 8
  • 3
87

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
  • 138,671
  • 33
  • 247
  • 280
spenthil
  • 3,373
  • 29
  • 17
  • Works with a label for me, and I'm running an older version. – Russia Must Remove Putin 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