Daniel@0: .TH DOT 1 "23 August 2004" \*(eX Daniel@0: .SH NAME Daniel@0: dot \- filter for drawing directed graphs Daniel@0: .br Daniel@0: neato \- filter for drawing undirected graphs Daniel@0: .br Daniel@0: twopi \- filter for radial layouts of graphs Daniel@0: .br Daniel@0: circo \- filter for circular layout of graphs Daniel@0: .br Daniel@0: fdp \- filter for drawing undirected graphs Daniel@0: .br Daniel@0: sfdp \- filter for drawing large undirected graphs Daniel@0: .SH SYNOPSIS Daniel@0: \fBdot\fR Daniel@0: [\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR] Daniel@0: [\fB\-T\fIlang\fR] Daniel@0: [\fB\-l\fIlibfile\fR] Daniel@0: [\fB\-o\fIoutfile\fR] Daniel@0: [\fB\-K\fIlayout\fR] Daniel@0: [\fB\-O\fR] Daniel@0: [\fB\-P\fR] Daniel@0: [\fB\-v\fR] Daniel@0: [\fB\-V\fR] Daniel@0: [files] Daniel@0: .br Daniel@0: \fBneato\fR Daniel@0: [\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR] Daniel@0: [\fB\-T\fIlang\fR] Daniel@0: [\fB\-l\fIlibfile\fR] Daniel@0: [\fB\-n\fR[\fB1\fR|\fB2\fR]] Daniel@0: [\fB\-o\fIoutfile\fR] Daniel@0: [\fB\-K\fIlayout\fR] Daniel@0: [\fB\-O\fR] Daniel@0: [\fB\-P\fR] Daniel@0: [\fB\-v\fR] Daniel@0: [\fB\-V\fR] Daniel@0: [files] Daniel@0: .br Daniel@0: \fBtwopi\fR Daniel@0: [\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR] Daniel@0: [\fB\-T\fIlang\fR] Daniel@0: [\fB\-l\fIlibfile\fR] Daniel@0: [\fB\-o\fIoutfile\fR] Daniel@0: [\fB\-K\fIlayout\fR] Daniel@0: [\fB\-O\fR] Daniel@0: [\fB\-P\fR] Daniel@0: [\fB\-v\fR] Daniel@0: [\fB\-V\fR] Daniel@0: [files] Daniel@0: .br Daniel@0: \fBcirco\fR Daniel@0: [\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR] Daniel@0: [\fB\-T\fIlang\fR] Daniel@0: [\fB\-l\fIlibfile\fR] Daniel@0: [\fB\-o\fIoutfile\fR] Daniel@0: [\fB\-K\fIlayout\fR] Daniel@0: [\fB\-O\fR] Daniel@0: [\fB\-P\fR] Daniel@0: [\fB\-v\fR] Daniel@0: [\fB\-V\fR] Daniel@0: [files] Daniel@0: .br Daniel@0: \fBfdp\fR Daniel@0: [\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR] Daniel@0: [\fB\-T\fIlang\fR] Daniel@0: [\fB\-l\fIlibfile\fR] Daniel@0: [\fB\-o\fIoutfile\fR] Daniel@0: [\fB\-K\fIlayout\fR] Daniel@0: [\fB\-O\fR] Daniel@0: [\fB\-P\fR] Daniel@0: [\fB\-v\fR] Daniel@0: [\fB\-V\fR] Daniel@0: [files] Daniel@0: .br Daniel@0: \fBsfdp\fR Daniel@0: [\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR] Daniel@0: [\fB\-T\fIlang\fR] Daniel@0: [\fB\-l\fIlibfile\fR] Daniel@0: [\fB\-o\fIoutfile\fR] Daniel@0: [\fB\-K\fIlayout\fR] Daniel@0: [\fB\-O\fR] Daniel@0: [\fB\-P\fR] Daniel@0: [\fB\-v\fR] Daniel@0: [\fB\-V\fR] Daniel@0: [files] Daniel@0: .SH DESCRIPTION Daniel@0: .I dot Daniel@0: draws directed graphs. It works well on DAGs and other graphs Daniel@0: that can be drawn as hierarchies. Daniel@0: It reads attributed graph files and writes drawings. Daniel@0: By default, the output format Daniel@0: .I dot Daniel@0: is the input file with layout coordinates appended. Daniel@0: .PP Daniel@0: .I neato Daniel@0: draws undirected graphs using ``spring'' models (see Kamada and Kawai, Daniel@0: Information Processing Letters 31:1, April 1989). Input files must be Daniel@0: formatted in the Daniel@0: .I dot Daniel@0: attributed graph language. Daniel@0: By default, the output of Daniel@0: .I neato Daniel@0: is the input graph with layout coordinates appended. Daniel@0: .PP Daniel@0: .I twopi Daniel@0: draws graphs using a radial layout (see G. Wills, Daniel@0: Symposium on Graph Drawing GD'97, September, 1997). Daniel@0: Basically, one node is chosen as the center and put at the origin. Daniel@0: The remaining nodes are placed on a sequence of concentric circles Daniel@0: centered about the origin, each a fixed radial distance from the Daniel@0: previous circle. Daniel@0: All nodes distance 1 from the center are placed on the first circle; Daniel@0: all nodes distance 1 from a node on the first circle are placed on Daniel@0: the second circle; and so forth. Daniel@0: .PP Daniel@0: .I circo Daniel@0: draws graphs using a circular layout (see Daniel@0: Six and Tollis, GD '99 and ALENEX '99, and Daniel@0: Kaufmann and Wiese, GD '02.) Daniel@0: The tool identifies biconnected components and draws the nodes of Daniel@0: the component on a circle. The block\(hycutpoint tree Daniel@0: is then laid out using a recursive radial algorithm. Edge Daniel@0: crossings within a circle are minimized by placing as many edges on Daniel@0: the circle's perimeter as possible. Daniel@0: In particular, if the component is outerplanar, the component will Daniel@0: have a planar layout. Daniel@0: .PP Daniel@0: If a node belongs to multiple non\(hytrivial biconnected components, Daniel@0: the layout puts the node in one of them. By default, this is the first Daniel@0: non\(hytrivial component found in the search from the root component. Daniel@0: .PP Daniel@0: .I fdp Daniel@0: draws undirected graphs using a ``spring'' model. It relies on a Daniel@0: force\(hydirected approach in the spirit of Fruchterman and Reingold Daniel@0: (cf. Software\(hyPractice & Experience 21(11), 1991, pp. 1129\(hy1164). Daniel@0: .PP Daniel@0: .I sfdp Daniel@0: also draws undirected graphs using the ``spring'' model described Daniel@0: above, but it uses a multi-scale approach to produce layouts Daniel@0: of large graphs in a reasonably short time. Daniel@0: .SH OUTPUT FORMATS Daniel@0: Dot uses an extensible plugin mechanism for its output renderers, Daniel@0: so to see what output formats your installation of dot supports Daniel@0: you can use ``dot \-Txxx'' (where xxx is an unlikely format) Daniel@0: and check the warning message. Daniel@0: Also, The plugin mechanism supports multiple implementations Daniel@0: of the output formats. Daniel@0: To see what variants are available, use, for example: ``dot \-Tpng:'' Daniel@0: and to force a particular variant, use, for example: ``dot \-Tpng:gd'' Daniel@0: .P Daniel@0: Traditionally, dot supports the following: Daniel@0: \fB\-Tps\fP (PostScript), Daniel@0: \fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics), Daniel@0: \fB\-Tfig\fP (XFIG graphics), Daniel@0: \fB\-Tmif\fP (FrameMaker graphics), Daniel@0: \fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers), Daniel@0: \fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics), Daniel@0: \fB\-Tdia\fP (GTK+ based diagrams), Daniel@0: \fB\-Timap\fP (imagemap files for httpd servers for each node or edge Daniel@0: that has a non\(hynull "href" attribute.), Daniel@0: \fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml). Daniel@0: Additional less common or more special\(hypurpose output formats Daniel@0: can be found at http://www.graphviz.org/cvs/doc/info/output.html.) Daniel@0: .P Daniel@0: Alternative plugins providing support for a given output format Daniel@0: can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP Daniel@0: The first plugin listed is always the default. Daniel@0: .P Daniel@0: The \fB\-P\fP switch can be used to produce a graph of all output variants supported by plugins in the local installation of graphviz. Daniel@0: .SH GRAPH FILE LANGUAGE Daniel@0: Here is a synopsis of the graph file language, traditionally using the extension \fB.dot\fR, for graphs: Daniel@0: .PP Daniel@0: [\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR Daniel@0: .br Daniel@0: Is the top level graph. If the graph is \fBstrict\fR then multiple edges are Daniel@0: not allowed between the same pairs of nodes. Daniel@0: If it is a directed graph, indicated by \fBdigraph\fR, Daniel@0: then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR Daniel@0: then the \fIedgeop\fR must be "\-\-". Daniel@0: Statements may be: Daniel@0: .PP Daniel@0: \fIname\fB=\fIval\fB;\fR Daniel@0: .br Daniel@0: \fBnode [\fIname\fB=\fIval\fB];\fR Daniel@0: .br Daniel@0: \fBedge [\fIname\fB=\fIval\fB];\fR Daniel@0: .br Daniel@0: Set default graph, node, or edge attribute \fIname\fP to \fIval\fP. Daniel@0: Any subgraph, node, or edge appearing after this inherits the new Daniel@0: default attributes. Daniel@0: .PP Daniel@0: \fBn0 [\fIname0=val0,name1=val1,...\fB];\fR Daniel@0: Creates node \fBn0\fP (if it does not already exist) Daniel@0: and sets its attributes according to the optional list. Daniel@0: .PP Daniel@0: \fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR Daniel@0: .br Daniel@0: Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets Daniel@0: their attributes according to the optional list. Daniel@0: Creates nodes as necessary. Daniel@0: .PP Daniel@0: [\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR Daniel@0: .br Daniel@0: Creates a subgraph. Subgraphs may be used in place Daniel@0: of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges. Daniel@0: [\fBsubgraph \fIname\fR] is optional; Daniel@0: if missing, the subgraph is assigned an internal name. Daniel@0: .PP Daniel@0: Comments may be /*C\(hylike*/ or //C++\(hylike. Daniel@0: Daniel@0: .PP Daniel@0: Attribute names and values are ordinary (C\(hystyle) strings. Daniel@0: The following sections describe attributes that control graph layout. Daniel@0: Daniel@0: .SH "GRAPH ATTRIBUTES" Daniel@0: .PP Daniel@0: \fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches. Daniel@0: .PP Daniel@0: \fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit. Daniel@0: .PP Daniel@0: \fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be Daniel@0: a floating point number, or one of the keywords \fBfill\fP, Daniel@0: \fBcompress\fP, or \fBauto\fP. Daniel@0: .PP Daniel@0: \fBlayout=\fIengine\fR indicates the preferred layout engine ("dot", "neato", fdp" etc) overriding the default from the basename of the command or the -K commandline option. Daniel@0: .PP Daniel@0: \fBmargin=\fIf\fR sets the page margin (included in the page size). Daniel@0: .PP Daniel@0: \fBnodesep=\fIf\fR sets the minimum separation between nodes. Daniel@0: .PP Daniel@0: \fBranksep=\fIf\fR sets the minimum separation between ranks. Daniel@0: .PP Daniel@0: \fBordering=out\fR constrains order of out\(hyedges in a subgraph Daniel@0: according to their file sequence. Daniel@0: .PP Daniel@0: \fBrankdir=LR|RL|BT\fR requests a left\(hyto\(hyright, right\(hyto\(hyleft, or bottom\(hyto\(hytop, drawing. Daniel@0: .PP Daniel@0: \fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination. Daniel@0: .PP Daniel@0: \fBrank=same\fR (or \fBmin\fP or \fBmax\fP) in a subgraph Daniel@0: constrains the rank assignment of its nodes. If a subgraph's Daniel@0: name has the prefix \fBcluster\fP, its nodes are drawn in Daniel@0: a distinct rectangle of the layout. Clusters may be nested. Daniel@0: .PP Daniel@0: \fBrotate=90\fR sets landscape mode. Daniel@0: (\fBorientation=land\fR is backward compatible but obsolete.) Daniel@0: .PP Daniel@0: \fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page. Daniel@0: .PP Daniel@0: \fBnslimit=\fIf\fR or \fBmclimit=\fIf\fR adjusts the bound on the Daniel@0: number of network simplex or mincross iterations by the given ratio. Daniel@0: For example, \fBmclimit=2.0\fP runs twice as long. Daniel@0: .PP Daniel@0: \fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for Daniel@0: overlay diagrams. The PostScript array variable \fIlayercolorseq\fR Daniel@0: sets the assignment of colors to layers. The least index is 1 and Daniel@0: each element must be a 3\(hyelement array to be interpreted as a color coordinate. Daniel@0: .PP Daniel@0: \fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background). Daniel@0: .PP Daniel@0: \fBhref=\fI"url"\fR the default url for image map files; in PostScript files, Daniel@0: the base URL for all relative URLs, as recognized by Acrobat Distiller Daniel@0: 3.0 and up. Daniel@0: .PP Daniel@0: \fBURL=\fI"url"\fR ("URL" is a synonym for "href".) Daniel@0: .PP Daniel@0: \fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet Daniel@0: in \-Tsvg and \-Tsvgz outputs. Ignored by other formats. Daniel@0: .PP Daniel@0: \fBsplines\fR. If set to \fItrue\fR, edges are Daniel@0: drawn as splines. Daniel@0: If set to \fIpolyline\fR, edges are Daniel@0: drawn as polylines. Daniel@0: If set to \fIortho\fR, edges are Daniel@0: drawn as orthogonal polylines. Daniel@0: In all of these cases, the nodes may not overlap. Daniel@0: If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are Daniel@0: drawn as line segments. Daniel@0: The default is \fItrue\fR for dot, and \fIfalse\fR for all other layouts. Daniel@0: Daniel@0: .PP Daniel@0: \fB(neato\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBstart=\fIval\fR. Requests random initial placement and seeds Daniel@0: the random number generator. If \fIval\fP is not an integer, Daniel@0: the process ID or current time is used as the seed. Daniel@0: .PP Daniel@0: \fBepsilon=\fIn\fR. Sets the cutoff for the solver. Daniel@0: The default is 0.1. Daniel@0: Daniel@0: .PP Daniel@0: \fB(twopi\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBroot=\fIctr\fR. This specifies the node to be used as the center of Daniel@0: the layout. If not specified, \fItwopi\fP will randomly pick one of the Daniel@0: nodes that are furthest from a leaf node, where a leaf node is a node Daniel@0: of degree 1. If no leaf nodes exists, an arbitrary node is picked as center. Daniel@0: .PP Daniel@0: \fBranksep=\fIval\fR. Specifies the radial distance in inches between Daniel@0: the sequence of rings. The default is 0.75. Daniel@0: .PP Daniel@0: \fBoverlap=\fImode\fR. This specifies what \fItwopi\fP should do if Daniel@0: any nodes overlap. If mode is \fI"false"\fP, the program uses Voronoi Daniel@0: diagrams to adjust the nodes to eliminate overlaps. If mode is \fI"scale"\fP, Daniel@0: the layout is uniformly scaled up, preserving node sizes, until nodes no Daniel@0: longer overlap. The latter technique removes overlaps while preserving Daniel@0: symmetry and structure, while the former removes overlaps more compactly Daniel@0: but destroys symmetries. Daniel@0: If mode is \fI"true"\fP (the default), no repositioning is done. Daniel@0: Daniel@0: .PP Daniel@0: \fB(circo\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBroot=\fInodename\fR. Specifies the name of a node occurring in the Daniel@0: root block. If the graph is disconnected, the \fBroot\fP node attribute Daniel@0: can be used to specify additional root blocks. Daniel@0: .PP Daniel@0: \fBmindist=\fIvalue\fR. Sets the minimum separation between all nodes. If not Daniel@0: specified then \fIcirco\fP uses a default value of 1.0. Daniel@0: Daniel@0: .PP Daniel@0: \fB(fdp\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBK=\fIval\fR. Sets the default ideal node separation Daniel@0: in the layout. Daniel@0: .PP Daniel@0: \fBmaxiter=\fIval\fR. Sets the maximum number of iterations used to Daniel@0: layout the graph. Daniel@0: .PP Daniel@0: \fBstart=\fIval\fR. Adjusts the random initial placement of nodes Daniel@0: with no specified position. If \fIval\fP is is an integer, Daniel@0: it is used as the seed for the random number generator. Daniel@0: If \fIval\fP is not an integer, a random system\(hygenerated integer, Daniel@0: such as the process ID or current time, is used as the seed. Daniel@0: .PP Daniel@0: Daniel@0: .SH "NODE ATTRIBUTES" Daniel@0: .PP Daniel@0: \fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width. Daniel@0: Adding \fBfixedsize=true\fP forces these to be the actual size Daniel@0: (text labels are ignored). Daniel@0: .PP Daniel@0: \fBshape=record polygon epsf \fIbuiltin_polygon\fR Daniel@0: .br Daniel@0: \fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg Daniel@0: triangle box diamond trapezium parallelogram house hexagon octagon Daniel@0: note tab box3d component.\fR Daniel@0: (Polygons are defined or modified by the following node attributes: Daniel@0: \fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR, Daniel@0: \fBdistortion\fR and \fBskew\fR.) \fBepsf\fR uses the node's Daniel@0: \fBshapefile\fR attribute as the path name of an external Daniel@0: EPSF file to be automatically loaded for the node shape. Daniel@0: .PP Daniel@0: \fBlabel=\fItext\fR where \fItext\fP may include escaped newlines Daniel@0: \\\|n, \\\|l, or \\\|r for center, left, and right justified lines. Daniel@0: The string '\\N' value will be replaced by the node name. Daniel@0: The string '\\G' value will be replaced by the graph name. Daniel@0: Record labels may contain recursive box lists delimited by { | }. Daniel@0: Port identifiers in labels are set off by angle brackets < >. Daniel@0: In the graph file, use colon (such as, \fBnode0:port28\fR). Daniel@0: .PP Daniel@0: \fBfontsize=\fIn\fR sets the label type size to \fIn\fP points. Daniel@0: .PP Daniel@0: \fBfontname=\fIname\fR sets the label font family name. Daniel@0: .PP Daniel@0: \fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color Daniel@0: if style=filled and \fBfillcolor\fR is not specified. Daniel@0: .PP Daniel@0: \fBfillcolor=\fIcolorvalue\fR sets the fill color Daniel@0: when style=filled. If not specified, the fillcolor when style=filled defaults Daniel@0: to be the same as the outline color. Daniel@0: .PP Daniel@0: \fBfontcolor=\fIcolorvalue\fR sets the label text color. Daniel@0: .PP Daniel@0: A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness) Daniel@0: floating point numbers between 0 and 1, or an X11 color name such as Daniel@0: \fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR, Daniel@0: or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value. Daniel@0: .PP Daniel@0: \fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code. Daniel@0: .PP Daniel@0: \fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers. Daniel@0: The empty string means no layers (invisible). Daniel@0: .PP Daniel@0: The following attributes apply only to polygon shape nodes: Daniel@0: .PP Daniel@0: \fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made Daniel@0: regular, i.e. symmetric about the x and y axis, otherwise the Daniel@0: polygon takes on the aspect ratio of the label. Daniel@0: \fIbuiltin_polygons\fR that are not already regular are made regular Daniel@0: by this attribute. Daniel@0: \fIbuiltin_polygons\fR that are already regular are not affected (i.e. Daniel@0: they cannot be made asymmetric). Daniel@0: .PP Daniel@0: \fBperipheries=\fIn\fR sets the number of periphery lines drawn around Daniel@0: the polygon. This value supersedes the number of periphery lines Daniel@0: of \fIbuiltin_polygons\fR. Daniel@0: .PP Daniel@0: \fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3 Daniel@0: results in an ellipse. Daniel@0: This attribute is ignored by \fIbuiltin_polygons\fR. Daniel@0: .PP Daniel@0: \fBorientation=\fIf\fR sets the orientation of the first apex of the Daniel@0: polygon counterclockwise from the vertical, in degrees. Daniel@0: \fIf\fR may be a floating point number. Daniel@0: The orientation of labels is not affected by this attribute. Daniel@0: This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR Daniel@0: .PP Daniel@0: \fBdistortion=\fIf\fR sets the amount of broadening of the top and Daniel@0: narrowing of the bottom of the polygon (relative to its orientation). Daniel@0: Floating point values between \-1 and +1 are suggested. Daniel@0: This attribute is ignored by \fIbuiltin_polygons\fR. Daniel@0: .PP Daniel@0: \fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and Daniel@0: left\(hydisplacement of the bottom of the polygon (relative to its Daniel@0: orientation). Daniel@0: Floating point values between \-1 and +1 are suggested. Daniel@0: This attribute is ignored by \fIbuiltin_polygons\fR. Daniel@0: .PP Daniel@0: \fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG Daniel@0: files. Daniel@0: The substrings '\\N' and '\\G' are substituted in the same manner as Daniel@0: for the node label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the node label string. Daniel@0: .PP Daniel@0: \fBURL=\fI"url"\fR ("URL" is a synonym for "href".) Daniel@0: .PP Daniel@0: \fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps Daniel@0: and SVG, effective when nodes have a URL. Daniel@0: The target string is used to determine which window of the browser is used Daniel@0: for the URL. Setting it to "_graphviz" will open a new window if it doesn't Daniel@0: already exist, or reuse it if it does. Daniel@0: If the target string is empty, the default, Daniel@0: then no target attribute is included in the output. Daniel@0: The substrings '\\N' and '\\G' are substituted in the same manner as Daniel@0: for the node label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the node label string. Daniel@0: .PP Daniel@0: \fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps Daniel@0: and SVG, effective when nodes have a URL. The tooltip string defaults to be the Daniel@0: same as the label string, but this attribute permits nodes without Daniel@0: labels to still have tooltips thus permitting denser graphs. Daniel@0: The substrings '\\N' and '\\G' are substituted in the same manner as Daniel@0: for the node label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the node label string. Daniel@0: Daniel@0: .PP Daniel@0: \fB(circo\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBroot=\fItrue/false\fR. This specifies that the block containing the given Daniel@0: node be treated as the root of the spanning tree in the layout. Daniel@0: Daniel@0: .PP Daniel@0: \fB(fdp\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBpin=\fIval\fR. If \fIval\fR is "true", the node will remain at Daniel@0: its initial position. Daniel@0: Daniel@0: .SH "EDGE ATTRIBUTES" Daniel@0: \fBminlen=\fIn\fR where \fIn\fP is an integer factor that applies Daniel@0: to the edge length (ranks for normal edges, or minimum node separation Daniel@0: for flat edges). Daniel@0: .PP Daniel@0: \fBweight=\fIn\fR where \fIn\fP is the integer cost of the edge. Daniel@0: Values greater than 1 tend to shorten the edge. Weight 0 flat Daniel@0: edges are ignored for ordering nodes. Daniel@0: .PP Daniel@0: \fBlabel=\fItext\fR where \fItext\fR may include escaped newlines Daniel@0: \\\|n, \\\|l, or \\\|r for centered, left, or right justified lines. Daniel@0: If the substring '\\T' is found in a label it will be replaced by the tail_node name. Daniel@0: If the substring '\\H' is found in a label it will be replaced by the head_node name. Daniel@0: If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name Daniel@0: If the substring '\\G' is found in a label it will be replaced by the graph name. Daniel@0: or by: tail_node_name\-\-head_node_name for undirected graphs. Daniel@0: .PP Daniel@0: \fBfontsize=\fIn\fR sets the label type size to \fIn\fP points. Daniel@0: .PP Daniel@0: \fBfontname=\fIname\fR sets the label font family name. Daniel@0: .PP Daniel@0: \fBfontcolor=\fIcolorvalue\fR sets the label text color. Daniel@0: .PP Daniel@0: \fBstyle=solid dashed dotted bold invis\fP Daniel@0: .PP Daniel@0: \fBcolor=\fIcolorvalue\fR sets the line color for edges. Daniel@0: .PP Daniel@0: \fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates Daniel@0: parallel edges, one edge for each color. Daniel@0: .PP Daniel@0: \fBdir=forward back both none\fP controls arrow direction. Daniel@0: .PP Daniel@0: \fBtailclip,headclip=false\fP disables endpoint shape clipping. Daniel@0: .PP Daniel@0: \fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG Daniel@0: files. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBURL=\fI"url"\fR ("URL" is a synonym for "href".) Daniel@0: .PP Daniel@0: \fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps Daniel@0: and SVG, effective when edges have a URL. Daniel@0: If the target string is empty, the default, Daniel@0: then no target attribute is included in the output. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps Daniel@0: effective when edges have a URL. The tooltip string defaults to be the Daniel@0: same as the edge label string. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot, Daniel@0: tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP. Daniel@0: .PP Daniel@0: \fBarrowsize\fP (norm_length=10,norm_width=5, Daniel@0: inv_length=6,inv_width=7,dot_radius=2) Daniel@0: .PP Daniel@0: \fBheadlabel,taillabel=string\fP for port labels. Daniel@0: \fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP Daniel@0: for head and tail labels. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".) Daniel@0: .PP Daniel@0: \fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps Daniel@0: and SVG, effective when edge heads have a URL. Daniel@0: The headtarget string is used to determine which window of the browser is used Daniel@0: for the URL. If the headtarget string is empty, the default, Daniel@0: then headtarget defaults to the same value as target for the edge. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps Daniel@0: effective when head ports have a URL. The tooltip string defaults to be the Daniel@0: same as the headlabel string. Daniel@0: The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".) Daniel@0: .PP Daniel@0: \fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps Daniel@0: and SVG, effective when edge tails have a URL. Daniel@0: The tailtarget string is used to determine which window of the browser is used Daniel@0: for the URL. If the tailtarget string is empty, the default, Daniel@0: then tailtarget defaults to the same value as target for the edge. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps Daniel@0: effective when tail ports have a URL. The tooltip string defaults to be the Daniel@0: same as the taillabel string. Daniel@0: The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as Daniel@0: for the edge label attribute. Daniel@0: Additionally the substring '\\L' is substituted with the edge label string. Daniel@0: .PP Daniel@0: \fBlabeldistance\fP and \fPport_label_distance\fP set distance; also Daniel@0: \fBlabelangle\fP (in degrees CCW) Daniel@0: .PP Daniel@0: \fBdecorate\fP draws line from edge to label. Daniel@0: .PP Daniel@0: \fBsamehead,sametail\fP aim edges having the same value to the Daniel@0: same port, using the average landing point. Daniel@0: .PP Daniel@0: \fBconstraint=false\fP causes an edge to be ignored for rank assignment. Daniel@0: .PP Daniel@0: \fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers. Daniel@0: The empty string means no layers (invisible). Daniel@0: Daniel@0: .PP Daniel@0: \fB(neato\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBw=\fIf\fR sets the weight (spring constant) of an edge Daniel@0: to the given floating point value. The default is 1.0; Daniel@0: greater values make the edge tend more toward its optimal length. Daniel@0: .PP Daniel@0: \fBlen=\fIf\fR sets the optimal length of an edge. Daniel@0: The default is 1.0. Daniel@0: .PP Daniel@0: \fB(fdp\(hyspecific attributes)\fR Daniel@0: .br Daniel@0: \fBweight=\fIf\fR sets the weight of an edge Daniel@0: to the given floating point value. The default is 1.0; Daniel@0: greater values make the edge tend more toward its optimal length. Daniel@0: .SH "COMMAND LINE OPTIONS" Daniel@0: \fB\-G\fP sets a default graph attribute. Daniel@0: .br Daniel@0: \fB\-N\fP sets a default node attribute. Daniel@0: .br Daniel@0: \fB\-E\fP sets a default edge attribute. Daniel@0: Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR Daniel@0: .PP Daniel@0: \fB\-l\fIfile\fR loads custom PostScript library files. Daniel@0: Usually these define custom shapes or styles. Daniel@0: If \fB\-l\fP is given by itself, the standard library is omitted. Daniel@0: .PP Daniel@0: \fB\-T\fIlang\fR sets the output language as described above. Daniel@0: Daniel@0: .PP Daniel@0: \fB\-n\fR[\fB1\fR|\fB2\fR] (no\(hyop) Daniel@0: If set, neato assumes nodes have already been positioned and all Daniel@0: nodes have a pos attribute giving the positions. Daniel@0: It then performs an optional adjustment to remove node\(hynode overlap, Daniel@0: depending on the value of the overlap attribute, Daniel@0: computes the edge layouts, depending on the value of the \fBsplines\fR attribute, Daniel@0: and emits the graph in the appropriate format. Daniel@0: If num is supplied, the following actions occur: Daniel@0: .nf Daniel@0: num = 1 Daniel@0: .fi Daniel@0: Equivalent to \-n. Daniel@0: .nf Daniel@0: num > 1 Daniel@0: .fi Daniel@0: Use node positions as specified, Daniel@0: with no adjustment to remove node\(hynode overlaps, Daniel@0: and use any edge layouts already specified by the pos attribute. Daniel@0: neato computes an edge layout for any edge that does not have a pos attribute. Daniel@0: As usual, edge layout is guided by the \fBsplines\fR attribute. Daniel@0: .PP Daniel@0: \fB\-K\fIlayout\fR override the default layout engine implied by the command name. Daniel@0: .PP Daniel@0: \fB\-O\fP automatically generate output filenames based on the input filename and the -T format. Daniel@0: .PP Daniel@0: \fB\-P\fP generate a graph of the currently available plugins. Daniel@0: .PP Daniel@0: \fB\-v\fP (verbose) prints various information useful for debugging. Daniel@0: .PP Daniel@0: \fB\-V\fP (version) prints version information and exits. Daniel@0: .PP Daniel@0: \fB\-?\fP prints the usage and exits. Daniel@0: .SH "EXAMPLES" Daniel@0: .nf Daniel@0: digraph test123 { Daniel@0: a \-> b \-> c; Daniel@0: a \-> {x y}; Daniel@0: b [shape=box]; Daniel@0: c [label="hello\\\|nworld",color=blue,fontsize=24, Daniel@0: fontname="Palatino\-Italic",fontcolor=red,style=filled]; Daniel@0: a \-> z [label="hi", weight=100]; Daniel@0: x \-> z [label="multi\-line\\\|nlabel"]; Daniel@0: edge [style=dashed,color=red]; Daniel@0: b \-> x; Daniel@0: {rank=same; b x} Daniel@0: } Daniel@0: .fi Daniel@0: .PP Daniel@0: .nf Daniel@0: graph test123 { Daniel@0: a \-\- b \-\- c; Daniel@0: a \-\- {x y}; Daniel@0: x \-\- c [w=10.0]; Daniel@0: x \-\- y [w=5.0,len=3]; Daniel@0: } Daniel@0: .fi Daniel@0: .SH "CAVEATS" Daniel@0: Edge splines can overlap unintentionally. Daniel@0: .PP Daniel@0: Flat edge labels are slightly broken. Daniel@0: Intercluster edge labels are totally broken. Daniel@0: .PP Daniel@0: Because unconstrained optimization is employed, node boxes can Daniel@0: possibly overlap or touch unrelated edges. All existing Daniel@0: spring embedders seem to have this limitation. Daniel@0: .PP Daniel@0: Apparently reasonable attempts to pin nodes or adjust edge lengths Daniel@0: and weights can cause instability. Daniel@0: .SH AUTHORS Daniel@0: Stephen C. North Daniel@0: .br Daniel@0: Emden R. Gansner Daniel@0: .br Daniel@0: John C. Ellson Daniel@0: .PP Daniel@0: The bitmap driver (PNG, GIF etc) is by Thomas Boutell, Daniel@0: .PP Daniel@0: The Truetype font renderer is from Daniel@0: the Freetype Project (David Turner, Robert Wilhelm, and Werner Lemberg) Daniel@0: (who can be contacted at freetype\-devel@lists.lrz\-muenchen.de). Daniel@0: .SH "SEE ALSO" Daniel@0: This man page contains only a small amount of the information related Daniel@0: to the Graphviz layout programs. The most complete information can be Daniel@0: found at http://www.graphviz.org/Documentation.php, especially in the Daniel@0: on\(hyline reference pages. Most of these documents are also available in the Daniel@0: \fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions. Daniel@0: .PP Daniel@0: dotty(1) Daniel@0: .br Daniel@0: tcldot(n) Daniel@0: .br Daniel@0: xcolors(1) Daniel@0: .br Daniel@0: libgraph(3) Daniel@0: .PP Daniel@0: E. R. Gansner, S. C. North, K. P. Vo, "DAG \(hy A Program to Draw Directed Graphs", Software \(hy Practice and Experience 17(1), 1988, pp. 1047\(hy1062. Daniel@0: .br Daniel@0: E. R. Gansner, E. Koutsofios, S. C. North, K. P. Vo, "A Technique for Drawing Directed Graphs," IEEE Trans. on Soft. Eng. 19(3), 1993, pp. 214\(hy230. Daniel@0: .br Daniel@0: S. North and E. Koutsofios, "Applications of graph visualization", Daniel@0: Graphics Interface 94, pp. 234\(hy245. Daniel@0: .br Daniel@0: E. Koutsofios and S. C. North, "Drawing Graphs with dot," Daniel@0: Available on research.att.com in dist/drawdag/dotguide.ps.Z. Daniel@0: .br Daniel@0: S. C. North, "NEATO User's Manual". Daniel@0: Available on research.att.com in dist/drawdag/neatodoc.ps.Z.