Question

Dans la langue DOT pour GraphViz, je suis en train de représenter un diagramme de dépendance. Je dois être en mesure d'avoir des noeuds dans un conteneur et d'être en mesure de faire des nœuds et / ou des conteneurs dépendant des autres noeuds et / ou des conteneurs.

J'utilise subgraph pour représenter mes conteneurs. liaison Node fonctionne très bien, mais je ne peux pas comprendre comment connecter des sous-graphes.

Compte tenu du programme ci-dessous, je dois être capable de se connecter cluster_1 et cluster_2 avec une flèche, mais tout ce que j'ai essayé crée de nouveaux nœuds au lieu de relier les pôles:

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";
}

entrer image description ici

Était-ce utile?

La solution

Le manuel utilisateur DOT donne l'exemple suivant d'un graphe avec les clusters avec des arêtes entre les clusters

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;
}

et les bords entre les noeuds et les clusters.

entrer image description ici

Autres conseils

Pour plus de commodité la solution décrite dans la réponse de HighPerformanceMark, appliquée directement à la question initiale, ressemble à ceci:

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];
}

Le compound=true dans la déclaration de graph est essentiel. Ce produit sortie:

graphique avec les clusters connectés

Notez que j'ai changé les bords pour faire référence à des nœuds dans le cluster, a ajouté le ltail et lhead attributs à chaque bord, en spécifiant le nom du cluster, et a ajouté l'attribut niveau graphique « composé = true ».

En ce qui concerne l'inquiétude que l'on pourrait vouloir connecter un cluster sans noeuds à l'intérieur, ma solution a été toujours ajouter un nœud à chaque cluster, rendu avec style = texte brut. Utilisez ce nœud pour étiqueter le cluster (au lieu du du pôle attribut intégré « label », qui doit être réglé sur la chaîne vide (en Python, label='""'). Cela signifie que je ne suis plus l'ajout d'arêtes qui relient les grappes directement, mais cela fonctionne dans ma situation particulière.

Assurez-vous que vous utilisez la mise en page de fdp pour le fichier. Je ne pense pas neato prend en charge les clusters.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top