How to add an annotation outside of a node in Graphviz' dot?

xlabel

Have a look at xlabel (external label).

main.dot

graph {
    node [shape=square];
    1 [xlabel="a"]
    2 [xlabel="b"]
    1 -- 2;
}

Convert:

dot -Tpng main.dot > main.png

Output:

enter image description here

Not sure however how easily you can control exact label placement with this method: even overlaps can happen by default. See:

  • Graphviz graph positioning xlabels
  • xlabels for nodes overlap with edges in dot

shape=record

I just tend to prefer the shape=record approach mentioned by https://stackoverflow.com/a/23031506/895245 or their generalization, HTML-like labels, as it makes it clearer what label belongs to each node:

graph {
    rankdir=LR
    node [shape=record];
    1 [label="1|a"]
    2 [label="2|b"]
    1 -- 2;
}

Output:

enter image description here

TODO can you avoid typing 1 and 2 twice?

Tested on Ubuntu 16.10, graphviz 2.38.


It's not supported by the Zest rendering, but on the DOT level you could use record-based nodes:

rankdir=LR;
node [shape=record];
m1[label="void m1()|OK"];
m1[label="void m2()|Failed"];

For details see http://www.graphviz.org/doc/info/shapes.html#record