Output Formats

The output format is specified with the -Tlang flag on the command line, where lang is one of the parameters listed below.

The formats actually available in a given Graphviz system depend on how the system was built and the presence of additional libraries. To see what formats dot supports, run dot -T?. See the description of the -T flag for additional information.

Note that the internal coordinate system has the origin in the lower left corner. Thus, positions in the canon, dot, xdot, plain, and plain-ext formats need to be interpreted in this manner.

bmp Windows Bitmap Format
cgimage CGImage bitmap format
cmap Client-side imagemap (deprecated)
eps Encapsulated PostScript
exr OpenEXR
fig FIG
GD/GD2 formats
gif GIF
gtk GTK canvas
ico Icon Image File Format
Server-side and client-side imagemaps
Server-side and client-side imagemaps
ismap Server-side imagemap (deprecated)
jp2 JPEG 2000
Dot graph represented in JSON format
pdf Portable Document Format (PDF)
pic Kernighan's PIC graphics language
Simple text format
png Portable Network Graphics format
pov POV-Ray markup language (prototype)
ps PostScript
ps2 PostScript for PDF
psd PSD
sgi SGI
Scalable Vector Graphics
tga Truevision TGA
TIFF (Tag Image File Format)
tk TK graphics
Vector Markup Language (VML)
vrml VRML
wbmp Wireless BitMap format
webp Image format for the Web
Xlib canvas

Format Descriptions

Outputs images in the Windows BMP format.
canon ,
dot ,
gv ,
xdot ,
xdot1.2 ,
These formats produce output in the dot language. Using canon produces a prettyprinted version of the input, with no layout performed.

The dot option corresponds to attributed dot output, and is the default output format. It reproduces the input, along with layout information for the graph. In particular, a bb attribute is attached to the graph, specifying the bounding box of the drawing. If the graph has a label, its position is specified by the lp attribute.

Each node gets pos, width and height attributes. If the node is a record, the record rectangles are given in the rects attribute. If the node is a polygon and the vertices attribute is defined, this attribute contains the vertices of the node.

Every edge is assigned a pos attribute, and if the edge has a label, the label position is given in lp.

The xdot format extends the dot format by providing much more detailed information about how graph components are drawn. It relies on additional attributes for nodes, edges and graphs.

The format is fluid; comments and suggestions for better representations are welcome. To allow for changes in the format, Graphviz attaches the attribute xdotversion to the graph. If the xdotversion attribute is set in the input graph, the renderer will only output features supported by that version. Note that the formats xdot1.2 and xdot1.4 are equivalent to setting xdotversion=1.2 and xdotversion=1.4, respectively.

Additional drawing attributes can appear on nodes, edges, clusters and on the graph itself. There are six new attributes:
_draw_General drawing without labels
_ldraw_Label drawing
_hdraw_Head arrowheadEdge only
_tdraw_Tail arrowheadEdge only
_hldraw_Head labelEdge only
_tldraw_Tail labelEdge only

For a given graph object, one will typically a draw directive before the label directive. For example, for a node, one would first use the commands in _draw_ followed by the commands in _ldraw_.

The value of these attributes consists of the concatenation of some (multi-)set of the following 13 rendering or attribute operations. (The number is parentheses gives the xdot version when the operation was added to the format. If no version number is given, the operation was in the original specification.)
E x0 y0 w h Filled ellipse ((x-x0)/w)2 + ((y-y0)/h)2 = 1
e x0 y0 w h Unfilled ellipse ((x-x0)/w)2 + ((y-y0)/h)2 = 1
P n x1 y1 ... xn yn Filled polygon using the given n points
p n x1 y1 ... xn yn Unfilled polygon using the given n points
L n x1 y1 ... xn yn Polyline using the given n points
B n x1 y1 ... xn yn B-spline using the given n control points
b n x1 y1 ... xn yn Filled B-spline using the given n control points (1.1)
T x y j w n -b1b2...bn Text drawn using the baseline point (x,y). The text consists of the n bytes following '-'. The text should be left-aligned (centered, right-aligned) on the point if j is -1 (0, 1), respectively. The value w gives the width of the text as computed by the library.
t f Set font characteristics. The integer f is the OR of BOLD=1, ITALIC=2, UNDERLINE=4, SUPERSCRIPT=8, SUBSCRIPT=16, (1.5) STRIKE-THROUGH=32 (1.6), and OVERLINE=64 (1.7).
C n -b1b2...bn Set fill color. The color value consists of the n bytes following '-'. (1.1)
c n -b1b2...bn Set pen color. The color value consists of the n bytes following '-'. (1.1)
F s n -b1b2...bn Set font. The font size is s points. The font name consists of the n bytes following '-'. (1.1)
S n -b1b2...bn Set style attribute. The style value consists of the n bytes following '-'. The syntax of the value is the same as specified for a styleItem in style. (1.1)
I x y w h n -b1b2...bn Externally-specified image drawn in the box with lower left corner (x,y) and upper right corner (x+w,y+h). The name of the image consists of the n bytes following '-'. This is usually a bitmap image. Note that the image size, even when converted from pixels to points, might be different from the required size (w,h). It is assumed the renderer will perform the necessary scaling. (1.2)

Note that the filled figures (ellipses, polygons and B-Splines) imply two operations: first, drawing the filled figure with the current fill color; second, drawing an unfilled figure with the current pen color, pen width and pen style.

Within the context of a single drawing attribute, e.g., _draw_, there is an implicit state for the graphical attributes. That is, once a color, style, font, or font characteristic is set, it remains valid for all relevant drawing operations until the value is reset by another xdot cmd.

Style values which can be incorporated in the graphics model do not appear in xdot output. In particular, the style values filled, rounded, diagonals, and invis will not appear. Indeed, if style contains invis, there will not be any xdot output at all.

With version 1.4 of xdot, color strings may now encode linear and radial gradients. Linear gradients have the form
    '[' x0 y0 x1 y1 n [color-stop]+ ']'
where (x0,y0) and (x1,y1) define the starting and ending points of the gradient line segment, and n gives the number of color-stops. Each color-stop has the form
    v m -b1b2...bm
where v is a number in the range [0,1] defining a position on the gradient line segment, with color specified by the m byte string b1b2...bm, the same format as used for colors in the 'c' and 'C' operations.

Radial gradients have the form
    '(' x0 y0 r0 x1 y1 r1 n [color-stop]+ ')'
where xj yj rj, for j=0,1, specify the center and radius of the start and ending circle, and n gives the number of color-stops. A color-stop has the same format as defined for linear gradients, again given the fractional offset and its associated color.

In handling text alignment, the application may want to recompute the string width using its own rendering primitives.

The text operation is only used in the label attributes. Normally, the non-text operations are only used in the non-label attributes. If, however, the decorate attribute is set on an edge, its label attribute will also contain a polyline operation. In addition, if a label is a complex, HTML-like label, it will also contain non-text operations.

All coordinates and sizes are in points. Note though that if an edge or node is invisible, no drawing operations are attached to it.

Version info:
Xdot versionGraphviz versionModification
1.0 1.9
1.1 2.8First plug-in version
1.22.13Support image operator I
1.32.31Add numerical precision
1.42.32Add gradient colors
1.52.34Fix text layout problem; fix inverted vector in gradient; support version-specific output; new t op for text characteristics
1.62.35Add STRIKE-THROUGH bit for t
1.72.37Add OVERLINE for t

Output using the CGImage format.
Produces map files for client-side image maps. The cmap format is mostly identical to cmapx, but the latter is well-formed XML amenable to processing by XML tools. In particular, the cmapx output is wrapped in <map></map>.

See Note.

Produces Encapsulated PostScript output. At present, this is only guaranteed to be correct for a single input graph since the Bounding Box information has to appear at the beginning of the output, and this will be based on the first graph.
Output in the OpenEXR format
Outputs graphs in the FIG graphics language.
gd ,
Output images in the GD and GD2 format. These are the internal formats used by the gd library. The latter is compressed.
Outputs GIF bitmap images.
Creates a GTK window and displays the output there.
Outputs images in the Windows ICO format.
imap ,
Produces map files for server-side and client-side image maps. These can be used in a web page with a graphical form of the output, e.g. in JPEG, GIF or PNG format, to attach links to nodes and edges. Graphviz generates an object's map information only if the object has a non-trival URL or href attribute, or if it has an explicit tooltip attribute.

For example, to create a server-side map given the dot file

/* x.gv */
digraph mainmap {
  command [URL="http://www.research.att.com/command.html"];
  command -> output [URL="colors.html"];
one would process the graph and generate two output files:
dot -Timap -ox.map -Tgif -ox.gif x.gv
and then refer to it in a web page: <A HREF="x.map"><IMG SRC="x.gif" ismap="ismap" /></A> For client-side maps, one again generates two output files:
dot -Tcmapx -ox.map -Tgif -ox.gif x.gv
and uses the HTML <IMG SRC="x.gif" USEMAP="#mainmap" /> ... [content of x.map] ... Note that the name given in the USEMAP attribute must be the same as the ID attribute of the MAP element. The Graphviz renderer uses the name of the graph as the ID. Thus, in the example above, where the graph's name is mainmap, we have USEMAP="#mainmap" in the IMG attribute, and x.map will look like <map id="mainmap" name="mainmap"> ... </map>

URLs can be attached to the root graph, nodes and edges. If a node has a URL, clicking in the node will activate the link. If an edge has a URL, various points along the edge (but not necessarily the head or tail) will link to it. In addition, if the edge has a label, that will link to the URL. As for the head of the edge, this is linked to the headURL, if set. Otherwise, it is linked to the edge's URL if that is defined. The analogous description holds for the tail and the tailURL. A URL associated with the graph is used as a default link.

If the URL of a node contains the escape sequence "\N", it will be replaced by the node's name. If the headURL is defined and contains the escape sequence "\N", it will be replaced by the headlabel, if defined. The analogous result holds for the tailURL and the taillabel.

See Note.

imap_np ,
These are identical to the imap and cmapx formats, except they rely solely on rectangles as active areas.
Produces HTML image map files. This is a predecessor (circa 1994) of the IMAP format. Most servers now use the latter. URLs can be attached to the root graph, nodes and edges. Since edge links are attached to edge labels, an edge must have a label for its URL to be used. For both nodes and edges, if the URL has the escape sequence "\N" embedded in its string, this will be replaced with the node or edge name.
Output using the JPEG 2000 format.
jpg ,
jpeg ,
Output JPEG compressed image files.
json ,
json0 ,
dot_json ,
These formats produce a JSON output encoding the DOT language. Using json0 produces output in JSON format that contains the same information produced by -Tdot. Using json produces output in JSON format that contains the same information produced by -Txdot. Both of these assume the graph has been processed by one of the layout algorithms. The dot_json and xdot_json also produce JSON output similar to to json0 and json, respectively, except they only use the content of the graph on input. In particular, they do not assume that the graph has been processed by any layout algorithm, and the only xdot information appearing in the output was in the original input file.

The output produced by these follows the json schema shown below. Note that the objects array has all of the subgraphs first, followed by all of the nodes. The _gvid value is the index of the subgraph or node in the objects array. This also holds true for the edges in the objects array. Note that this format allows clustered graphs, where edges can connect clusters as well as nodes.

pct ,
Output in the Apple PICT file format.
Produces PDF output. (This option assumes Graphviz includes the Cairo renderer.) Alternatively, one can use the ps2 option to produce PDF-compatible PostScript, and then use a ps-to-pdf converter.

Note: At present, this option does not support anchors, etc. To get these included in your PDF output, use ps2.

Output is given in the text-based PIC language developed for troff. See Pic language.
plain ,
The plain and plain-ext formats produce output using a simple, line-based language. The latter format differs in that, on edges, it provides port names on head and tail nodes when applicable.

There are four types of statements.

 graph scale width height
 node name x y width height label style shape color fillcolor
 edge tail head n x1 y1 .. xn yn [label xl yl] style color
The width and height values give the width and height of the drawing. The lower left corner of the drawing is at the origin. The scale value indicates how the drawing should be scaled if a size attribute was given and the drawing needs to be scaled to conform to that size. If no scaling is necessary, it will be set to 1.0. Note that all graph, node and edge coordinates and lengths are given unscaled.
The name value is the name of the node, and x and y give the node's position. The width and height are the width and height of the node. The label, style, shape, color and fillcolor give the node's label, style, shape, color and fillcolor, respectively, using attribute default values where necessary. If the node does not have a style attribute, "solid" is used.
The tail and head values give the names of the head and tail nodes. In plain-ext format, the head or tail name will be appended with a colon and a portname if the edge connects to the node at a port. n is the number of control points defining the B-spline forming the edge. This is followed by 2*n numbers giving the x and y coordinates of the control points in order from tail to head. If the edge has a label, this comes next followed by the x and y coordinates of the label's position. The edge description is completed by the edge's style and color. As with nodes, if a style is not defined, "solid" is used.

Note: The control points given in an edge statement define the body of the edge. In particular, if the edge has an arrowhead to the head or tail node, there will be a gap between the last or first control points and the boundary of the associated node. There are at least 3 possible ways of handling this gap:

  • Arrange that the input graph uses dir=none, arrowhead=none, or arrowtail=none for all edges. In this case, the terminating control points will always touch the node.
  • Consider the line segment joining the control point and the center of the node, and determine the point where the segment intersects the node's boundary. Then use the control point and the intersection point as the main axis of an arrowhead. The problem with this approach is that, if the edge has a port, the edge will not be pointing to the center of the node. In this case, rather than use the control point and center point, one can use the control point and its tangent.
  • Arrange that the input graph uses headclip=false or tailclip=false. In this case, the edge will terminate at the node's center rather than its boundary. If arrowheads are used, there will still be a gap, but normally this will occur within the node. The application will still need to clip the spline to the node boundary. Also, as with the previous item, if the edge points to a node port, this technique will fail.
The output consists of one graph line, a sequence of node lines, one per node, a sequence of edge lines, one per edge, and a final stop line. All units are in inches, represented by a floating point number.

Note that the plain formats provide minimal information, really giving not much more than node positions and sizes, and edge spline control points. These formats are usually most useful to applications wanting just this geometric information, and willing to fill in all of the graphical details. The only real advantages to these formats is their terseness and their ease of parsing. In general, the dot and xdot are preferable in terms of the quantity of information provided.

Produces output in the PNG (Portable Network Graphics) format.

(25 November 2014) A standard Graphviz installation will render using both the Cairo and GD library. By mixing the rendering and formatting of these libraries, one can achieve different variations in the output.

-Tpng:gd (or -Tpng:gd:gd)
Indexed color, no antialiasing
Indexed color, with antialiasing
-Tpng (or -Tpng:cairo)
True color, with antialiasing
These options are listed in increasing order of image quality and output size.
Scene-description language for 3D modelling for the Persistence of Vision Raytracer.
Produces PostScript output.

Note: The default PostScript renderer can only handle the Latin-1 character set. To get non-Latin-1 characters into PostScript output, use -Tps:cairo, assuming your version was built with the Cairo renderer.

Produces PostScript output with PDF notations. It is assumed the output will be directly converted into PDF format. The notations include PDF bounding box information, so that the resulting PDF file can be correctly used with pdf tools, such as pdflatex. In addition, if a node has a URL attribute, this gets translated into PDF code such that the node, when viewed in a PDF-viewer, e.g., acroread, is a link to the given URL. If a URL is attached to the graph, this serves as a base, such that relative URLs on nodes are derived from it.
Output in the Adobe PhotoShop PSD file format.
Output in the SGI image file format.
svg ,
Produce SVG output, the latter in compressed format.

See Note.

Output in the Truevision TGA or TARGA format.
tif ,
Produces TIFF output.
Output using the text-based TK graphics primitives.
vml ,
Produces VML output, the latter in compressed format.

See Note.

Outputs graphs in the VRML format. To get a 3D embedding, nodes must have a z attribute. These can either be supplied as part of the input graph, or be generated by neato provided dim=3 and at least one node has a z value.

Line segments are drawn as cylinders. In general, VRML output relies on having the PNG library to produce images used to texture-fill the node shapes. However, if shape=point, a node is drawn as a 3D sphere.

Produces output in the Wireless BitMap (WBMP) format, optimized for mobile computing.
Produces output in the image format for the Web (WEBP) format, optimized for web devices such as tablets. See Wikipedia's WebP or Google's webp pages.
xlib ,
Creates an Xlib window and displays the output there.

Image Formats

The image and shapefile attributes specify an image file to be included as part of the final diagram. Not all image formats can be read. In addition, even if read, not all image formats can necessarily be used in a given output format.

The graph below shows what image formats can be used in which output formats, and the required plugins. On the left are the supported image formats. On the right are the supported output formats. In the middle are the plugins: image loaders, renderers, drivers, arranged by plugin library. This presents the most general case. A given installation may not provide one of the plugins, in which case, that transformation is not possible.


  1. In the formats: -Tcmap, -Tcmapx, -Tsvg, -Tvml, the output generates 'id="node#"' properties for nodes, 'id="edge#"' properties for edges, and 'id="cluster#"' properties for clusters, with the '#' replaced by an internally assigned integer. These strings can be provided instead by an externally provided "id=xxx" attribute on the object. Normal "\N" "\E" "\G" substitutions are applied. Externally provided id values are not used internally, and it is the use's reponsibilty to ensure that they are sufficiently unique for their intended downstream use. Note, in particular, that "\E" is not a unique id for multiedges.