In der DOT
Sprache für GraphViz
versuche ich, ein Abhängigkeitsdiagramm darzustellen. Ich muss in der Lage sein, Knoten in einem Container zu haben und Knoten und / oder Container von anderen Knoten und / oder Containern abhängig zu machen.
Ich verwende subgraph
, um meine Container darzustellen. Die Knotenverknüpfung funktioniert einwandfrei, aber ich kann nicht herausfinden, wie Subgraphen verbunden werden.
In Anbetracht der unten angegebene Programm muss ich in der Lage sein , zu verbinden cluster_1
und cluster_2
mit einem Pfeil, aber alles , was ich versucht habe , schafft neue Knoten stattdessen die Cluster verbinden:
digraph G {
graph [fontsize=10 fontname="Verdana"];
node [shape=record fontsize=10 fontname="Verdana"];
subgraph cluster_0 {
node [style=filled];
"Item 1" "Item 2";
label = "Container A";
color=blue;
}
subgraph cluster_1 {
node [style=filled];
"Item 3" "Item 4";
label = "Container B";
color=blue;
}
subgraph cluster_2 {
node [style=filled];
"Item 5" "Item 6";
label = "Container C";
color=blue;
}
// Renders fine
"Item 1" -> "Item 2";
"Item 2" -> "Item 3";
// Both of these create new nodes
cluster_1 -> cluster_2;
"Container A" -> "Container C";
}
fdp
. Das verknüpfte Beispiel und das obige funktionieren beide (die letzte Zeile im Beispiel hier muss die Namen der Untergraphen verwenden, nicht die Beschriftung, und es kann hilfreich sein, Zeilenlängen für das Diagramm einzuschließen). es ist ein wenig eng wie es ist).fdp
v2.28.0 verwenden und die Quelle aus dem Beispiel kopieren / einfügen, werden die Linien mit der Mitte des Untergraphen und nicht mit den Kanten verbunden. Wenn Sie den Punkt in OmniGraffle öffnen, sind sie ordnungsgemäß verbunden,neato
unddot
beide erstellen überflüssige Knoten für den Cluster.Antworten:
Das DOT-Benutzerhandbuch enthält das folgende Beispiel eines Diagramms mit Clustern mit Kanten zwischen Clustern:
... und Kanten zwischen Knoten und Clustern:
quelle
DUMMY_0 [shape=point style=invis]
Zur Vereinfachung der Bezugnahme sieht die in der Antwort von HighPerformanceMark beschriebene Lösung, die direkt auf die ursprüngliche Frage angewendet wird, folgendermaßen aus:
Das
compound=true
in dergraph
Erklärung ist von entscheidender Bedeutung. Das erzeugt Ausgabe:Beachten Sie, dass ich die Kanten in Referenzknoten innerhalb des Clusters geändert, die Attribute ltail und lhead zu jeder Kante hinzugefügt, den Clusternamen angegeben und das Attribut "Verbindung = wahr" auf Diagrammebene hinzugefügt habe.
In Bezug auf die Sorge, dass ein Cluster ohne Knoten verbunden werden soll, bestand meine Lösung darin , jedem Cluster immer einen Knoten hinzuzufügen, der mit style = plaintext gerendert wird. Verwenden Sie diesen Knoten, um den Cluster zu beschriften (anstelle des integrierten "label" -Attributs des Clusters, das auf die leere Zeichenfolge gesetzt werden sollte (in Python
label='""'
). Dies bedeutet, dass ich keine Kanten mehr hinzufüge, die Cluster direkt verbinden, sondern es funktioniert in meiner besonderen Situation.quelle
cluster_0 -> cluster_1
präsent, während du ausgibst. Weil es in cluster_0 möglicherweise viele Elemente gibt, die mit anderen vielen Elementen in cluster_1 verknüpft sind (viele zu viele oder eins zu viele). Es wäre gut, nur zwei zu verknüpfen.Stellen Sie sicher, dass Sie das
fdp
Layout für die Datei verwenden. Ich denke nicht, dassneato
Cluster unterstützt werden.quelle
neato
Engine keine Cluster unterstützt. Ich bin nicht sicher, ob dies ein Fehler ist oder nicht.