15
Présentation GraphViz Élise MAIGNÉ 15 mai 2013

Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

Présentation GraphViz

Élise MAIGNÉ

15 mai 2013

Page 2: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 3: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 4: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 5: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 6: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 7: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 8: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 9: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 10: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

9

Page 11: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 12: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

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

Page 13: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

"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

Page 14: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

13

Page 15: Élise MAIGNÉ 15 mai 2013 inge_stat...2016/05/13  · 2.2 Déclarations et labels Il est préférable de déclarer les noeuds avant les relations pour faciliter les notations et s’yretrouver

14