2013-03-03 38 views
18

Ich möchte erzwingen, Punkt nur vertikale oder horizontale Kanten zwischen den Knoten anzuzeigen.Erzwingen von orthogonalen (vertikalen oder horizontalen) Kanten mit Punkt

Ich habe einen ähnlichen Antrag mit der Post Family tree layout with Dot/GraphViz, aber ich mit Bäumen bin nicht zu tun gefunden, so dass ich hoffe, dass es eine Lösung ohne Einfügen von zusätzlichen Knoten ist ...

Wenn ich das Diagramm erstellen:

 
digraph G { 

    splines=ortho 

    A [ shape=box ] 
    B [ shape=box ] 
    C [ shape=box ] 
    D [ shape=box ] 

    A -> B 
    A -> C 

    B -> D 
    C -> D 

} 

Was ich bekommen, ist dies:

enter image description here

Aber ich würde einen Graphen wie diese mögen:

enter image description here

Wie kann ich eine solche Rendering?

Edit: das Attribut "Splines" funktioniert nicht wie erwartet ... Gibt es etwas, das ich falsch gemacht habe?

Antwort

23

Ihre Syntax scheint korrekt zu sein. Wenn ich es laufen bekomme ich orthogonale Edge-Routing (von Sorten):

enter image description here

Welche Version haben Sie?

Ich frage, weil orthogonales Edge-Routing nur in Graphviz-Versionen vom 28. September 2010 und neuer verfügbar ist. Nicht alle Systeme haben neuere Versionen. Auf meinem System musste ich download und manuell Graphviz installieren, um eine Version neuer als 2.26.3 zu erhalten (die vom 26. Januar 2010 ist).

Angenommen, Ihr tatsächliches Diagramm enthält mehr als 4 Knoten, wenn Sie möchten, dass die Linien eine Biegung haben und Sie keine zusätzlichen (unsichtbaren) Knoten hinzufügen möchten, sollten Sie versuchen, mit dem Attribut nodesep zu spielen. Siehe Code und Bild unten.

digraph G { 

    graph [splines=ortho, nodesep=1] 
    node [shape=record] 

    A -> {B, C} -> D 
} 

enter image description here