Une variation sur @greg's answer, c'est un peu plus compact et moins dépendant de l'ordre des instructions dans le graphique.
Upsides:
- Il n'utilise pas du tout
rank=same
- En général, l'organisation source est un peu plus 'arborescente', ce qui rend les modifications faciles.
- Seulement 2 modifications mineures pour afficher/masquer tous les nœuds si nécessaire.
- Peu importe l'ordre dans lequel les bords sont déclarés, tant que le parent et les enfants sont tous sur la même ligne.
Inconvénient:
Comme le FAQ, il dépend encore des nœuds cachés pour équilibrer l'arbre.
graph calc {
graph[nodesep=0.25, ranksep=0.3, splines=line];
node [fontname = "Bitstream Vera Sans", fontsize=14,
style=filled, fillcolor=lightblue,
shape=circle, fixedsize=true, width=0.3];
// layout all nodes 1 row at a time
// order matters on each line, but not the order of lines
"+";
"/", am, "**";
// or can be more spread out if you need to . . .
n1 [label="1"];
dm;
n2 [label="2"];
"*", bm, "3", "4", cm, "5";
// make 'mid' nodes invisible
am, bm, cm, dm [style=dotted, label=""];
// layout all visible edges as parent -> left_child, right_child
"+" -- "/","**";
"/" -- "*","3"
"**"-- "4","5";
"*" -- n1, n2;
// link mid nodes with a larger weight:
edge [style=dotted, weight=10];
"+" -- am;
"/" -- bm;
"**"-- cm;
"*" -- dm;
}
qui se traduit par:
C'est la technique que je l'habitude d'utiliser quand je dois dessiner un arbre.Je n'utilise pas souvent gvpr parce qu'il ne joue pas bien dans les environnements où je veux souvent utiliser un graphique (sphinx, doxygen, etc. Mais si vous pouvez utiliser un pipeline standard pour créer votre graphique et que vous ne vous souciez pas de la source graphique, gvpr est votre ami.
merci, ça a l'air génial. – user360872