2017-12-16 31 views
3

Wenn man einen Graphviz-gerichteten Graphen hat, der am besten dazu geeignet ist, mit einem Punkt zu arrangieren, gibt es eine Möglichkeit, um das Problem eines großen Knotens zu umgehen, der überschüssige Abstände um andere Knoten desselben Rangs erzeugt.Wie vermeiden Sie Graphviz-Punktlayouts, die Platz verschwenden, mit Knoten unterschiedlicher Größe auf demselben Rang?

Zum Beispiel mit dem folgende Diagramm:

digraph { 
    b[label="line 1\nline 2\nline 3\nline 4\nline 5\nline 6\n"]; 

    a -> b; 
    a -> c; 
    b -> f; 
    c -> d; 
    d -> e; 
    e -> f; 
} 

(result of the above)

Die Grafik ist offensichtlich größer als notwendig aufgrund des linken Pfad der Höhe eines Ranges zu erhöhen, die nicht braucht sei so groß auf dem rechten Weg.

Gibt es vielleicht eine Möglichkeit, die beiden Pfade getrennt zu gestalten? Ich dachte, dass die Verwendung von Cluster-Untergraphen helfen könnte, aber es scheint, dass Ranghöhen auch in diesem Fall vollständig global sind.

Ich bin für ein Ergebnis ähnlich dieses Bild bearbeitet Hoffnung, (bitte entschuldigen Sie, es ist crudeness): enter image description here

Antwort

2

Als Abhilfe können Sie versuchen, edge[constraint = false]; hinzuzufügen.
Dies setzt constraint Attributwert für alle Kanten:

Rendered graph

Oder constraint Attribut nur für einige Kanten angeben.


EDIT: Ganz in der Nähe Ergebnis, das wir mit Hilfe von Subgraphen erreichen können:

digraph { 

    rankdir = LR; 

    b[label="line 1\nline 2\nline 3\nline 4\nline 5\nline 6\n"]; 

    subgraph cluster_0 { 

     rank = same; 

     style = invis; 

     a -> c -> d -> e -> f [constraint = false]; 

    } 

    a -> b; 
    b -> f; 

} 

wird wie folgt wiedergegeben werden:

Rendered graph

+0

Leider das nicht an Alle adressieren, wonach ich frage. Das führt nur dazu, dass alle Knoten auf den gleichen Rang gebracht werden, während ich brauche, dass die zwei Pfade von Knoten 'a' zu Knoten 'f' immer noch vertikal nebeneinander liegen, aber ohne die Höhe von Knoten 'b' das Auffüllen der Dinge auf dem anderen Weg zu erhöhen. Ich habe die Frage bearbeitet, um ein klärendes Bild hinzuzufügen. – Rednaxela

+0

@Rednaxela Ich habe die Antwort aktualisiert, neues Ergebnis sieht Ihrer zweiten Abbildung ziemlich ähnlich. – user882813

+0

Ahh, interessant. Das ist clever, indem man einen Graphen "rankdir = LR" verwendet und vertikale Unterabschnitte mit Knoten desselben Rangs auf diese Weise erzeugt. Nun, das funktioniert in diesem einfachen Beispiel gut genug, jedoch beschränkt es die Knoten, vertikal in der Spalte ausgerichtet zu sein. Ich denke nicht, dass sich dieser Ansatz gut auf die größeren Graphiken mit mehr Verzweigungen verallgemeinert, mit denen ich mich aus diesem Grund beschäftigen werde. Danke – Rednaxela

Verwandte Themen