Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est...

Preview:

Citation preview

Présentation GraphViz

Élise MAIGNÉ

15 mai 2013

Chapitre 1

Logiciel et notions de langage

Téléchagement sur le site de GraphViz : .Logiciel libre et open source utilisable sur GNU/Linux, Mac OS, Unix et Windows.

GraphViz permet de faire différents formats de graphes : hiérarchiques ou orientés (dot),non hiérarchiques - réseaux (neato / fdp), ...Ici je m’intéresse au langage dot pour faire des graphes orientés.

Langage dot :– graph : graphe et ses attributs (sens, format de sortie, taille, ...)– node : "noeud" ou entité et ses attibuts (forme, couleurs, label, ...)– edge : relation entre noeuds et ses attributs (sens, couleur, forme, épaisseur, ...)– subgraph : cluster, regroupement de noeudsDocumentation disponible sur le site de GraphViz (notamment la galerie de graphique

avec les codes) et sur .

La forme du texte à l’intérieur des noeuds peut être paramétrée en détail par l’utilisationde code HTML (qui ne sera pas présenté ici).

1

Chapitre 2

Graphes simples

2.1 A, B, CIntéret du « constraint = false » et de l’ordre des lignes.

On déclare les relations entre les noeuds a, b et c.

digraph G1 {a -> c;a -> b;b -> c;

}

digraph G2 {a -> b;a -> c;b -> c [constraint=false];

}

(a) avec contrainte (b) sans contrainte

2

2.2 Déclarations et labelsIl est préférable de déclarer les noeuds avant les relations pour faciliter les notations et

s’y retrouver.

digraph G3 {/* plus propre : déclaration des noeuds avant et labels */node [label="1er noeud"] a;node [label="2nd noeud"] b;node [label="3ème noeud"] c;

a -> b;a -> c;b -> c [constraint=false];

}

3

Chapitre 3

Pour aller plus loin

Le modèle de base, sans mise en forme.

digraph Graphsimple1 {/* options graphiques */rankdir=TB;

/* déclaration des noeuds */node [label="1er noeud"] a;node [label="2nd noeud"] b;node [label="3ème noeud"] c;node [label="4ème noeud"] d;node [label="5ème noeud"] e;

/* relations */a -> {b,c} ;{b;c}-> d;d -> e;

}

On peut changer les couleurs, la forme et la taille des noeuds, le format des relations, ...Les propriétés sont héritées par ordre de déclaration.

4

digraph Graphsimplestyle {/* options graphiques */node [fontname = "helvetica"];edge [fontname = "helvetica"];graph [label="Titre\n", labelloc=t; labeljust=center, fontname=Helvetica, fontsize=18]rankdir=TB; // ou BT ou LR ou RL

/* déclaration des noeuds + styles */node [label="1er noeud", shape=box, color=grey, style="filled"] a;node [color=black, shape="ellipse", style="filled", width=1.5, height=1.5, fillcolor=pink];node [label="2nd noeud"] b;node [label="3ème noeud", color=blue] c;node [label="4ème noeud", fillcolor=green] d;node [label="5ème noeud", shape=invtriangle] e;

/* relations */a -> {b,c};{b;c}-> d;d -> e [style=dotted, label="pointillés"];

}

5

3.1 Les clustersUn cluster est un regroupement de noeuds, déclaré par l’instruction subgraph (c’est un

graph à l’intérieur d’un graph).Lorsqu’on déclare un cluster il faut que son nom commence par « cluster » pour qu’il soitreconnu.

digraph Graphclusters {rankdir=LR;/* 1er cluster */

node [label="Départ"] nd;node [label="Noeud \n intermédiaire"] ni;node [label="Fin"] nf;

subgraph clusterstep1 {label="1er groupe";labeljust="l";style=filled;color=lightgrey;node [label="noeud 1"] g1n1;node [label="noeud 2"] g1n2;node [label="noeud 3"] g1n3;

}

/* 2nd cluster */subgraph clusterstep2 {

label="2nd groupe";labeljust="r";style=filled;

color=lightgrey;node [label="noeud 1"] g2n1;node [label="noeud 2"] g2n2;

}

/* Relations */nd -> g1n1;g1n1 -> {g1n2,g1n3} ;{g1n2;g1n3}-> ni;ni -> g2n1;g2n1 -> g2n2;g2n2 -> nf;

}

6

3.2 Imbrication de clustersOn peut imbriquer les clusters :

digraph G {rankdir = LR;/* cluster "principal" 2 **************************************************************/subgraph cluster2 {

labeljust="l";label="Etape 2";

/* 1er cluster *************************************************/node [label="Départ"] c2nd;node [label="Noeud \n intermédiaire"] c2ni;node [label="Fin"] c2nf;

subgraph clusterstep1 {label="1er groupe";labeljust="l";style=filled;color=lightgrey;node [label="noeud 1"] c2g1n1;node [label="noeud 2"] c2g1n2;node [label="noeud 3"] c2g1n3;

}

/* 2nd cluster *************************************************/subgraph clusterstep2 {

label="2nd groupe";labeljust="r";style=filled;

color=lightgrey;node [label="noeud 1"] c2g2n1;node [label="noeud 2"] c2g2n2;

}

/* Relations dans le cluster principal 2 ***********************/c2nd -> c2g1n1;c2g1n1 -> {c2g1n2,c2g1n3} ;{c2g1n2;c2g1n3}-> c2ni;c2ni -> c2g2n1;c2g2n1 -> c2g2n2;c2g2n2 -> c2nf;

}

/* cluster "principal"’ 1 **************************************************************/subgraph cluster1 {

labeljust="l";label="Etape 1";

rankdir=LR;/* 1er cluster *************************************************/

node [label="Départ"] c1nd;node [label="Noeud \n intermédiaire"] c1ni;node [label="Fin"] c1nf;

7

subgraph clusterstep1 {label="1er groupe";labeljust="l";style=filled;color=lightgrey;node [label="noeud 1"] c1g1n1;node [label="noeud 2"] c1g1n2;node [label="noeud 3"] c1g1n3;

}

/* 2nd cluster *************************************************/subgraph clusterstep2 {

label="2nd groupe";labeljust="r";style=filled;

color=lightgrey;node [label="noeud 1"] c1g2n1;node [label="noeud 2"] c1g2n2;

}

/* Relations dans le cluster principal 1 ***********************/c1nd -> c1g1n1;c1g1n1 -> {c1g1n2,c1g1n3} ;{c1g1n2;c1g1n3}-> c1ni;c1ni -> c1g2n1;c1g2n1 -> c1g2n2;c1g2n2 -> c1nf;

}}

En ajoutant c1ni -> c2ni [constraint=false]; à la fin du code du graphique (il faut que le lienentre les deux clusters soit déclaré en dehors de la déclaration des clusters principaux), on obtient le graphiquesuivant :

8

9

3.3 Noeuds invisiblesEn reprenant l’exemple vu précédemment, si l’on souhaite que deux flêches se rejoignent avant de pointer

vers un noeud.

digraph Graphsimplestyle {/* options graphiques */edge [fontsize=8];graph [label="Titre\n\n", labelloc=t; labeljust=center, fontname=Helvetica, fontsize=18]

node [fontname = "helvetica"];

/* déclaration des noeuds */node [label="1er noeud", shape=box, color=grey, style="filled"] a;node [color=black, shape="ellipse", style="filled", width=1.5, height=1.2, fillcolor=pink];node [label="2nd noeud"] b;node [label="3ème noeud", color=blue] c;node [label="4ème noeud", fillcolor=green] d;node [label="5ème noeud", shape=invtriangle] e;node [label="", width=0.001, height=0.001, style=point] f;

/* relations */a -> {b,c} [penwidth=3];b -> f [dir=none, headlabel="lien vers le \n noeud invisible", labeldistance=4, labelangle=30] ;c -> f [dir=none, headlabel="lien vers le \n noeud invisible", labeldistance=4, labelangle=-30] ;

f-> d;d -> e [style=dotted];

}

10

Chapitre 4

Autres exemples

GraphViz est performant pour le placement de noeuds (le placement est automatique), en particulierquand il y en a beaucoup.

digraph unix {size="10,10";node [color=lightblue2, style=filled];"5th Edition" -> "6th Edition";"5th Edition" -> "PWB 1.0";"6th Edition" -> "LSX";"6th Edition" -> "1 BSD";"6th Edition" -> "Mini Unix";"6th Edition" -> "Wollongong";"6th Edition" -> "Interdata";"Interdata" -> "Unix/TS 3.0";"Interdata" -> "PWB 2.0";"Interdata" -> "7th Edition";"7th Edition" -> "8th Edition";"7th Edition" -> "32V";"7th Edition" -> "V7M";"7th Edition" -> "Ultrix-11";"7th Edition" -> "Xenix";"7th Edition" -> "UniPlus+";"V7M" -> "Ultrix-11";"8th Edition" -> "9th Edition";"9th Edition" -> "10th Edition";"1 BSD" -> "2 BSD";"2 BSD" -> "2.8 BSD";"2.8 BSD" -> "Ultrix-11";"2.8 BSD" -> "2.9 BSD";"32V" -> "3 BSD";"3 BSD" -> "4 BSD";"4 BSD" -> "4.1 BSD";"4.1 BSD" -> "4.2 BSD";"4.1 BSD" -> "2.8 BSD";"4.1 BSD" -> "8th Edition";"4.2 BSD" -> "4.3 BSD";"4.2 BSD" -> "Ultrix-32";"4.3 BSD" -> "4.4 BSD";"4.4 BSD" -> "FreeBSD";

11

"4.4 BSD" -> "NetBSD";"4.4 BSD" -> "OpenBSD";"PWB 1.0" -> "PWB 1.2";"PWB 1.0" -> "USG 1.0";"PWB 1.2" -> "PWB 2.0";"USG 1.0" -> "CB Unix 1";"USG 1.0" -> "USG 2.0";"CB Unix 1" -> "CB Unix 2";"CB Unix 2" -> "CB Unix 3";"CB Unix 3" -> "Unix/TS++";"CB Unix 3" -> "PDP-11 Sys V";"USG 2.0" -> "USG 3.0";"USG 3.0" -> "Unix/TS 3.0";"PWB 2.0" -> "Unix/TS 3.0";"Unix/TS 1.0" -> "Unix/TS 3.0";"Unix/TS 3.0" -> "TS 4.0";"Unix/TS++" -> "TS 4.0";"CB Unix 3" -> "TS 4.0";"TS 4.0" -> "System V.0";"System V.0" -> "System V.2";"System V.2" -> "System V.3";"System V.3" -> "System V.4";

}

12

13

14

Recommended