102

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?

2 Answers 2

130

You should just use:

A -> B [dir=both]
Sign up to request clarification or add additional context in comments.

3 Comments

This saved me some redundant lines, and I'm using it as well as the top answer where appropriate.
You don't need quotes around "both"
@NoahSussman It can't be the accepted answer because it doesn't actually answer the question ;)
91

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.

5 Comments

Works with a label for me, and I'm running an older version.
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.
This is silly but it's what the OP wanted, so big up!
@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?
It's noteworthy that this only works if without labels, as seen e.g. with magjac.com/graphviz-visual-editor, this works and does what you want: dot digraph { concentrate=true a -> b b -> a c -> b d -> b } whereas this does not: dot digraph { concentrate=true a -> b [label="1"] b -> a [label="2"] c -> b d -> b }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.