====== GraphViz ======
* [[python:graphviz|Utilisation avec Python]]
S'écrit dans des fichiers ''.dot''.
https://www.graphviz.org/
==== Visualisation ====
* avec ''xdot''
* en convertissant le fichier DOT vers un autre format: ''dot -Tpng out.dot > out.png''
==== Syntaxe ====
digraph G {
label = "Titre";
subgraph cluster_A { # commencer par cluster_ est obligatoire !
pencolor = "transparent" # n'affiche pas de cadre autour du sous-graphe
label = "Sub A"
# commentaire
"a"
"a-0-0" [label="A-0-0"];
"a-0-1" [label="A-0-2", style="dashed"];
"a-0-0" -> "a-0-1";
"a-0-1" -> "a-0-0" [style="dashed"];
}
}
Faire des ''subgraph'' n'est pas obligatoire.
Au début, ''digraph'' indique que le graphe est orienté.
Ressources:
* [[https://cyberzoide.developpez.com/graphviz/]]
* [[https://www.tonyballantyne.com/graphs.html]]
* [[https://graphs.grevian.org/example]]
==== Forcer l'ordre horizontal des nœuds ====
[[https://stackoverflow.com/questions/16637305/children-order-in-graphviz-tree|Source]]
L'astuce est de créer un lien invisible. Pour s'assurer que le nœud ''A'' sera à gauche du nœud ''B'':
{rank = same; A -> B [style = invis];}
==== Avoir une disposition en grille des sous-graphes indépendants ====
[[https://stackoverflow.com/questions/8002352/how-to-control-subgraphs-layout-in-dot|Source]]
ccomps -x test.dot | dot | gvpack -array2 | neato -Tpng -n2 -o graph.png
Il est possible de préciser l'ordre des graphes :
digraph G1 {
sortv=1;
a->{b; c;};
}
digraph G2 {
sortv=2;
d -> {e; f;};
}
digraph G3 {
sortv=3;
g -> h;
}
digraph G4 {
sortv=4;
i -> j;
}
digraph G5 {
sortv=5;
{k; l;} -> m;
}