Créer une légende / clé dans GraphViz

J’aimerais inclure une légende ou une clé dans mon diagramme GraphViz. J’ai du mal à comprendre quel code utiliser, cependant. Je veux aussi le mettre dans un coin, mais la seule coordonnée que je connaisse est le bas à gauche: pos="10,10!" .

Est-ce que quelqu’un sait comment je peux faire fonctionner cela?

 digraph { rankdir=LR node [shape=plaintext] subgraph cluster_01 { label = "Legend"; key [label=<
item 1
item 2
item 3
item 4
>] key2 [label=<
 
 
 
 
>] key:i1:e -> key2:i1:w [style=dashed] key:i2:e -> key2:i2:w [color=gray] key:i3:e -> key2:i3:w [color=peachpuff3] key:i4:e -> key2:i4:w [color=turquoise4, style=dotted] } ...

entrer la description de l'image ici

J’ai utilisé le dot .

Je suis profondément convaincu que graphviz ne doit pas être utilisé de cette façon, mais vous pouvez utiliser des étiquettes HTML pour obtenir ce que vous voulez:

 digraph { Foo -> Bar -> Test; Foo -> Baz -> Test; { rank = sink; Legend [shape=none, margin=0, label=< 
Legend
Foo Foo
Bar
Baz
Test
Test
>]; } }

Voilà à quoi cela ressemble:

sortie graphviz

Le positionnement de la légende doit être fait comme n’importe quel autre nœud (j’ai utilisé rank = puits pour le faire descendre) – vous pouvez jouer avec son atsortingbut de margin pour affiner la position.

Modifier :

Sans utiliser d’étiquettes, c’est peut-être la voie à suivre – je ne suis pas sûr que ce soit pour éliminer complètement ranksep .

 digraph { mindist=0; ranksep=0; nodesep=0; node[shape=box,margin="0,0",width=1, height=0.5]; edge [style=invis]; Legend[width=2]; Legend -> Foo; Legend -> FooValue; Foo -> Bar; FooValue -> BarValue Bar -> Baz; BarValue -> BazValue; edge [constraint=false]; Foo -> FooValue; Bar -> BarValue Baz -> BazValue; } 

Résultant en:

entrer la description de l'image ici

Il y a quelques problèmes si vous utilisez graph [splines=ortho] : les lignes sont dans l’ordre inverse.

Source de points:

 digraph { rankdir=LR node [shape=plaintext] graph [splines=ortho] subgraph cluster_01 { label = "Legend"; key [label=<
item 1
item 2
item 3
item 4
item 5
>] key2 [label=<
 
 
 
 
 
>] key:i1:e -> key2:i1:w [color=red] key:i2:e -> key2:i2:w [color=gray] key:i3:e -> key2:i3:w [color=peachpuff3] key:i4:e -> key2:i4:w [color=turquoise4, style=dotted] key:i5:e -> key2:i5:w [color=red, style=dotted] } }