Lably
Skip to content

DOT (graph description language)

File format

  • 5 min read
  • 2 chapters

Related on Lably

Through Graph (discrete mathematics), Flowchart and Comment (computer programming)

Various programs can process DOT files. Some, such as dot, neato, twopi, circo, fdp, and sfdp, can read a DOT file and render it in graphical form. Others, such as gvpr, gc, acyclic, ccomps, sccmap, and tred, read DOT files and perform calculations on the represented graph. Finally, others, such as lefty, dotty, and grappa, provide an interactive interface. The GVedit tool combines a text editor and a non-interactive viewer. Most programs are part of the Graphviz package or use it internally.

DOT is historically an acronym for "DAG of tomorrow", as the successor to a DAG format and a dag program which handled only directed acyclic graphs.

Syntax

Graph types

Undirected graphs

At its simplest, DOT can be used to describe an undirected graph. An undirected graph shows simple relations between objects, such as reciprocal friendship between people. The graph keyword is used to begin a new graph, and nodes are described within curly braces. A double-hyphen (--) is used to show relations between the nodes.

<span id="mwPQ"></span><span class="linenos" data-line="1" id="mwPg"></span><span class="c1" id="mwPw">// The graph name and the semicolons are optional</span> <span class="linenos" data-line="2" id="mwQA"></span><span class="k" id="mwQQ">graph</span><span class="w" id="mwQg"> </span><span class="nt" id="mwQw">graphname</span><span class="w" id="mwRA"> </span><span class="p" id="mwRQ">{</span> <span class="linenos" data-line="3" id="mwRg"></span><span class="w" id="mwRw"> </span><span class="nt" id="mwSA">a</span><span class="w" id="mwSQ"> </span><span class="o" id="mwSg">--</span><span class="w" id="mwSw"> </span><span class="nt" id="mwTA">b</span><span class="w" id="mwTQ"> </span><span class="o" id="mwTg">--</span><span class="w" id="mwTw"> </span><span class="nb" id="mwUA">c</span><span class="p" id="mwUQ">;</span> <span class="linenos" data-line="4" id="mwUg"></span><span class="w" id="mwUw"> </span><span class="nt" id="mwVA">b</span><span class="w" id="mwVQ"> </span><span class="o" id="mwVg">--</span><span class="w" id="mwVw"> </span><span class="nt" id="mwWA">d</span><span class="p" id="mwWQ">;</span> <span class="linenos" data-line="5" id="mwWg"></span><span class="p" id="mwWw">}</span>

Directed graphs

Similar to undirected graphs, DOT can describe directed graphs, such as flowcharts and dependency trees. The syntax is the same as for undirected graphs, except the digraph keyword is used to begin the graph, and an arrow (->) is used to show relationships between nodes.

<span id="mwaQ"></span><span class="k" id="mwag">digraph</span><span class="w" id="mwaw"> </span><span class="nt" id="mwbA">graphname</span><span class="w" id="mwbQ"> </span><span class="p" id="mwbg">{</span> <span class="w" id="mwbw"> </span><span class="nt" id="mwcA">a</span><span class="w" id="mwcQ"> </span><span class="o" id="mwcg">-></span><span class="w" id="mwcw"> </span><span class="nt" id="mwdA">b</span><span class="w" id="mwdQ"> </span><span class="o" id="mwdg">-></span><span class="w" id="mwdw"> </span><span class="nb" id="mweA">c</span><span class="p" id="mweQ">;</span> <span class="w" id="mweg"> </span><span class="nt" id="mwew">b</span><span class="w" id="mwfA"> </span><span class="o" id="mwfQ">-></span><span class="w" id="mwfg"> </span><span class="nt" id="mwfw">d</span><span class="p" id="mwgA">;</span> <span class="p" id="mwgQ">}</span>

Attributes

Various attributes can be applied to graphs, nodes and edges in DOT files. These attributes can control aspects such as color, shape, and line styles. For nodes and edges, one or more attribute–value pairs are placed in square brackets [] after a statement and before the semicolon (which is optional). Graph attributes are specified as direct attribute–value pairs under the graph element, where multiple attributes are separated by a comma or using multiple sets of square brackets, while node attributes are placed after a statement containing only the name of the node, but not the relations between the dots.

<span id="mwkQ"></span><span class="k" id="mwkg">graph</span><span class="w" id="mwkw"> </span><span class="nt" id="mwlA">graphname</span><span class="w" id="mwlQ"> </span><span class="p" id="mwlg">{</span> <span class="w" id="mwlw"> </span><span class="c1" id="mwmA">// This attribute applies to the graph itself</span> <span class="w" id="mwmQ"> </span><span class="na" id="mwmg">size</span><span class="p" id="mwmw">=</span><span class="s2" id="mwnA">"1,1"</span><span class="p" id="mwnQ">;</span> <span class="w" id="mwng"> </span><span class="c1" id="mwnw">// The label attribute can be used to change the label of a node</span> <span class="w" id="mwoA"> </span><span class="nt" id="mwoQ">a</span><span class="w" id="mwog"> </span><span class="p" id="mwow">[</span><span class="na" id="mwpA">label</span><span class="p" id="mwpQ">=</span><span class="s2" id="mwpg">"Foo"</span><span class="p" id="mwpw">];</span> <span class="w" id="mwqA"> </span><span class="c1" id="mwqQ">// Here, the node shape is changed.</span> <span class="w" id="mwqg"> </span><span class="nt" id="mwqw">b</span><span class="w" id="mwrA"> </span><span class="p" id="mwrQ">[</span><span class="na" id="mwrg">shape</span><span class="p" id="mwrw">=</span><span class="s" id="mwsA">box</span><span class="p" id="mwsQ">];</span> <span class="w" id="mwsg"> </span><span class="c1" id="mwsw">// These edges both have different line properties</span> <span class="w" id="mwtA"> </span><span class="nt" id="mwtQ">a</span><span class="w" id="mwtg"> </span><span class="o" id="mwtw">--</span><span class="w" id="mwuA"> </span><span class="nt" id="mwuQ">b</span><span class="w" id="mwug"> </span><span class="o" id="mwuw">--</span><span class="w" id="mwvA"> </span><span class="nb" id="mwvQ">c</span><span class="w" id="mwvg"> </span><span class="p" id="mwvw">[</span><span class="na" id="mwwA">color</span><span class="p" id="mwwQ">=</span><span class="s" id="mwwg">blue</span><span class="p" id="mwww">];</span> <span class="w" id="mwxA"> </span><span class="nt" id="mwxQ">b</span><span class="w" id="mwxg"> </span><span class="o" id="mwxw">--</span><span class="w" id="mwyA"> </span><span class="nt" id="mwyQ">d</span><span class="w" id="mwyg"> </span><span class="p" id="mwyw">[</span><span class="na" id="mwzA">style</span><span class="p" id="mwzQ">=</span><span class="s" id="mwzg">dotted</span><span class="p" id="mwzw">];</span> <span class="w" id="mw0A"> </span><span class="c1" id="mw0Q">// [style=invis] hides a node.</span> <span class="p" id="mw0g">}</span>

HTML-like labels are supported, although initially Graphviz did not handle them.

Comments

DOT supports C and C++ style single line and multiple line comments. In addition, it ignores lines with a number sign symbol # as their first character, like many interpreted languages.

Sign in to keep reading

One more chapter is free with a Lably account.

More in Computing and communication