2010-06-27 3 views
21

J'ai un graphique que je veux que graphviz mette en page et visualise pour moi. Le graphique a 122 arêtes et 123 nœuds. Les bords sont de 4 types différents et je veux qu'ils puissent être distingués visuellement. Cependant je n'ai pas encore décidé quelle serait la meilleure façon de faire cela, j'aimerais jouer un peu avec les cadrans. Malheureusement, je ne vois rien comme un attribut "class" ou "stylesheet" pour les bords. Je ne peux définir les attributs visuels que pour chaque bord (beaucoup de répétitions). Peut-être ai-je raté quelque chose? Est-il possible, après tout, d'ajouter des arêtes à 4 groupes différents, puis de styliser les groupes, et non chaque arête individuellement?Graphviz: comment assigner le même style à un groupe d'arêtes?

Répondre

30

Pour le style des bords (ou noeuds) par groupe plutôt qu'individuellement, utilisez sous-graphe.

comme ceci:

digraph G { 

node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"]; 

subgraph c1 { 
    edge [color="#004225", arrowsize="0.6", penwidth="1"]; 
    "node 1" -> "node 3"; 
    "node 5" -> "node 7"; 
    "node 1" -> "node 2"; 
    label = ""; 
} 

subgraph c2 { 
    edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"]; 
    "node 2" -> "node 4"; 
    "node 4" -> "node 6"; 
    "node 3" -> "node 5"; 
    "node 6" -> "node 8"; 
    label = ""; 

} 

begin -> "node 1"; 
start -> "node 2"; 
"node 1" -> "node 4" 
"node 2" -> "node 6"; 

start [shape=diamond];} 

Donc, si vous mettez le code ci-dessus dans un fichier w/extension ".dot"; puis le rendre dans graphviz ,, vous verrez trois différents types de bords, l'apparence sage.

Un type est le juste par défaut (couleur = noir, épaisseur = 1, etc.) - c'est-à-dire, ces arêtes ne sont pas affectées à un sous-graphe.

Les deux autres types d'arêtes (un groupe fin, vert foncé et un groupe épais, jaune vif) sont définis en fonction de l'affectation à l'un des deux groupes de sous-graphes.

sous-graphe est souvent utilisé pour visuellement surbrillance une grappe de noeuds (par exemple, de distinguer un « groupe » contigu particulier de noeuds à partir du reste des noeuds dans le graphe); Cependant, il n'y a aucune exigence (comme vous pouvez le voir dans mon exemple) que les arêtes que vous avez choisi de nommer par assignation à un sous-graphe donné appartiennent à un «groupe» contigu de nœuds - vous pouvez désigner les arêtes que vous souhaitez assigner un sous-graphe donné.)

pour moi, les nœuds de style par groupe est analogue à la pratique HTML de définir une classe et l'assigner à une collection de divs en HTML balisage

+0

Comment peut-on définir le style par défaut pour les sous-graphes? – Pacerier

+1

Il n'y a pas besoin de sous-graphes. Toutes les arêtes définies en-dessous d'une déclaration de style de bord avec "edge [color = ... etc]" utiliseront ce style. – Bousch

12

Bien que @ la réponse de doug est correcte (utiliser des sous-graphes pour attribuer un style similaire à des groupes d'objets), je crois que mon exemple est mieux:

digraph G {                  
    compound=true; 
    subgraph columns { 
    c0r0 -> c0r1; 
    c0r1 -> c0r2; 
    c1r0 -> c1r1; 
    c1r1 -> c1r2; 
    c2r0 -> c2r1; 
    c2r1 -> c2r2; 
    } 
    subgraph rows { 
    edge [color=red, constraint=false]; 
    c0r0 -> c1r0; 
    c1r0 -> c2r0; 
    c0r1 -> c1r1; 
    c1r1 -> c2r1; 
    c0r2 -> c1r2; 
    c1r2 -> c2r2; 
    } 
} 


cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 

the resulting graph

+1

Parfait, simplement parfait. – Pacerier

+1

Pourquoi est-ce mieux? Ne pas vouloir te critiquer. Je ne sais pas assez graphviz pour comprendre comment c'est mieux et je suis curieux de savoir. –

+0

J'aime simplement le diagramme qui en résulte. Le principe de la solution n'est pas différent. – bukzor

Questions connexes