Punktdiagrammsprache - Wie werden bidirektionale Kanten automatisch erstellt?

81

Hier ist ein sehr vereinfachtes Beispiel für mein Punktdiagramm:

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

Dies schafft Alt-Text

Stattdessen möchte ich eine einzelne Kante zwischen A und B, aber mit einer doppelten Pfeilspitze. Ich weiß, wie man die doppelte Pfeilspitze als globale Option erhält:

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

Aber das sieht sehr hässlich aus und nicht alle meine Kanten sollten zweiköpfig sein.

Alt-Text

Wenn ich das Diagramm weiter verarbeite und die Doppelreferenz selbst erkenne und die beiden Kanten durch eine einzelne Kante ersetze, sieht es in Ordnung aus. Aber ich möchte diesen zusätzlichen Schritt lieber nicht machen müssen

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

Alt-Text

Irgendwelche besseren Lösungen?

Viel
quelle

Antworten:

65

Wie wäre es mit 'Konzentrat = wahr'?:

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

mit Konzentrat = wahr

Aus der Dokumentation :

Wenn dies zutrifft, verwenden Sie Kantenkonzentratoren. Dadurch werden Mehrfachkanten zu einer einzigen Kante zusammengeführt, und teilweise parallele Kanten teilen sich einen Teil ihrer Pfade. Die letztere Funktion ist außerhalb von dot noch nicht verfügbar.

verbraucht
quelle
Funktioniert mit einem Label für mich und ich verwende eine ältere Version.
Aaron Hall
1
Wenn es hilft ... hat das bei mir nicht funktioniert, da es die Kanten verschmolzen hat, sondern nur einen einzigen Pfeil am Ende angebracht hat. Dann habe ich versucht, "strenge Digraphen" ... und es funktioniert dann perfekt.
Philw
Das ist albern, aber es ist das, was das OP wollte, so groß!
Dan Rosenstark
@philw Es funktioniert auch nicht für mich, ich bekomme Kanten nur mit einer einzigen Pfeilspitze. Ich benutze pygraphviz und habe es versucht pgv.AGraph(directed=True, strict=True), aber es funktioniert auch nicht, ich bekomme wieder zwei Kanten ... Irgendwelche Vorschläge?
Tropilio
101

Sie sollten nur verwenden:

A -> B [dir=both]
user2598811
quelle
4
Dies ersparte mir einige redundante Leitungen, und ich verwende sie sowie gegebenenfalls die beste Antwort.
Aaron Hall
2
Sie brauchen keine Anführungszeichen um "beide"
Yetti99
@NoahSussman Es kann nicht die akzeptierte Antwort sein, weil es die Frage nicht wirklich beantwortet;)
Dan Rosenstark