Frage

In der DOT Sprache für GraphViz, Ich versuche, ein Abhängigkeitsdiagramm darzustellen. Ich muß in der Lage sein, Knoten in einem Container zu haben und in der Lage zu sein, Knoten zu machen und / oder Container abhängig von anderen Knoten und / oder Containern.

Ich verwende subgraph meine Container darzustellen. Knoten Verknüpfung funktioniert gut, aber ich kann nicht herausfinden, wie Subgraphen zu verbinden.

das Programm Da unten muß ich in der Lage sein cluster_1 und cluster_2 mit einem Pfeil zu verbinden, 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";
}

eingeben Bild Beschreibung hier

War es hilfreich?

Lösung

Die DOT Bedienungsanleitung gibt folgendes Beispiel eines Graphen mit Clustern mit Kanten zwischen Clustern

digraph G {
  compound=true;
  subgraph cluster0 {
    a -> b;
    a -> c;
    b -> d;
    c -> d;
  }
  subgraph cluster1 {
    e -> g;
    e -> f;
  }
  b -> f [lhead=cluster1];
  d -> e;
  c -> g [ltail=cluster0,lhead=cluster1];
  c -> e [ltail=cluster0];
  d -> h;
}

und Kanten zwischen den Knoten und Clustern.

eingeben Bild Beschreibung hier

Andere Tipps

Zur leichteren Orientierung die Lösung in HighPerformanceMark Antwort beschrieben, direkt auf die ursprüngliche Frage angewendet wird, sieht wie folgt aus:

digraph G {

    graph [fontsize=10 fontname="Verdana" compound=true];
    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;
    }

    // Edges between nodes render fine
    "Item 1" -> "Item 2";
    "Item 2" -> "Item 3";

    // Edges that directly connect one cluster to another
    "Item 1" -> "Item 3" [ltail=cluster_0 lhead=cluster_1];
    "Item 1" -> "Item 5" [ltail=cluster_0 lhead=cluster_2];
}

Die compound=true in der graph Erklärung ist von entscheidender Bedeutung. Das erzeugt eine Ausgabe:

Graph mit angeschlossenen Cluster

Beachten Sie, dass die Kanten I geändert Referenzknoten innerhalb des Clusters, hinzugefügt, um die ltail und LHEAD zu jeder Kante Attribut der Clusternamen spezifizieren, und addierte das Graph-Level-Attribut ‚compound = true‘.

In Bezug auf der Sorge, dass man einen Cluster ohne Knoten im Innern verbinden mag, meine Lösung wurde auf immer einen Knoten zu jedem Cluster hinzufügen, mit Stil gerendert = Klartext. Verwenden Sie diesen Knoten des Clusters (anstelle des Clusters eingebauten „Label“ Attribut zu kennzeichnen, die auf die leere Zeichenfolge gesetzt werden soll (in Python, label='""'). Das bedeutet, ich bin nicht mehr Kanten hinzufügen, die Cluster direkt verbinden, aber es funktioniert in meiner besonderen Situation.

Stellen Sie sicher, fdp Layout für die Datei verwenden. Ich glaube nicht, neato unterstützt Cluster.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top