wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: Node, Edge and Graph Attributes wolffd@0: wolffd@0: wolffd@0: wolffd@0:

Node, Edge and Graph Attributes

wolffd@0:
wolffd@0: The table below describes the attributes used by various Graphviz tools. wolffd@0: The table gives the name of the attribute, the graph components (node, wolffd@0: edge, etc.) which use the attribute and the type of the attribute wolffd@0: (strings representing legal values of that type). Where applicable, the table wolffd@0: also gives a default value for the attribute, a minimum allowed setting wolffd@0: for numeric attributes, and certain restrictions on the use of the attribute. wolffd@0:

wolffd@0: All Graphviz attributes are specified by name-value pairs. Thus, to wolffd@0: set the fillcolor of a node abc, one would use wolffd@0: wolffd@0: wolffd@0:
abc [fillcolor = red]
wolffd@0: Similarly, to set the arrowhead style of an edge abc -> def, wolffd@0: one would use wolffd@0: wolffd@0: wolffd@0:
abc -> def [arrowhead = diamond]
wolffd@0: Further details concerning the setting of attributes can be found wolffd@0: in the description of the wolffd@0: DOT language. wolffd@0:

wolffd@0: At present, most device-independent units are either inches or wolffd@0: wolffd@0: points, wolffd@0: which we take as 72 points per inch. wolffd@0:

wolffd@0: Note: Some attributes, such as wolffd@0: dir or arrowtail, are wolffd@0: ambiguous when used in wolffd@0: DOT wolffd@0: with an undirected graph since the head and tail of an edge are meaningless. wolffd@0: As a convention, the first time an undirected edge appears, the wolffd@0: DOT wolffd@0: parser will assign the left node as the tail node and the right node as wolffd@0: the head. For example, the edge A -- B will have tail A wolffd@0: and head B. It is the user's responsibility to handle such wolffd@0: edges consistently. If the edge appears later, in the format wolffd@0: wolffd@0: wolffd@0:
B -- A [taillabel = "tail"]
wolffd@0: the drawing will attach the tail label to node A. wolffd@0: To avoid possible confusion when such attributes are required, the user wolffd@0: is encouraged to use a directed graph. wolffd@0: If it is important to make the graph appear undirected, this can be wolffd@0: done using the dir, arrowtail wolffd@0: or arrowhead attributes. wolffd@0:

wolffd@0: The tools accept standard C representations for int and wolffd@0: double types. wolffd@0: For the bool type, TRUE values are wolffd@0: represented by "true" (case-insensitive) wolffd@0: and any non-zero integer, and FALSE values by "false" (case-insensitive) wolffd@0: and zero. wolffd@0: In addition, there are a variety of specialized types such as wolffd@0: arrowType, color, wolffd@0: pointf and rankdir. Legal values for these types are given wolffd@0: at the end. wolffd@0:

wolffd@0: In the Used By field, the wolffd@0: characters E, N, G, S and C wolffd@0: represent edges, nodes, the root graph, subgraphs wolffd@0: and cluster subgraphs, respectively. wolffd@0: This field indicates which graph component uses the attribute. wolffd@0:


wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
NameUsed ByTypeDefaultMinimumNotes
Damping wolffd@0: Gdouble0.990.0neato only
K wolffd@0: GCdouble0.30sfdp, fdp only
URL wolffd@0: ENGCescString wolffd@0: <none>svg, postscript, map only
arrowhead wolffd@0: EarrowType wolffd@0: normal
arrowsize wolffd@0: Edouble1.00.0
arrowtail wolffd@0: EarrowType wolffd@0: normal
aspect wolffd@0: GaspectType wolffd@0: dot only
bb wolffd@0: Grect wolffd@0: write only
bgcolor wolffd@0: GCcolor wolffd@0: <none>
center wolffd@0: Gbool wolffd@0: false
charset wolffd@0: Gstring"UTF-8"
clusterrank wolffd@0: GclusterMode wolffd@0: localdot only
color wolffd@0: ENCcolor wolffd@0:
colorList wolffd@0:
black
colorscheme wolffd@0: ENCGstring""
comment wolffd@0: ENGstring""
compound wolffd@0: Gbool wolffd@0: falsedot only
concentrate wolffd@0: Gbool wolffd@0: false
constraint wolffd@0: Ebool wolffd@0: truedot only
decorate wolffd@0: Ebool wolffd@0: false
defaultdist wolffd@0: Gdouble1+(avg. len)*sqrt(|V|)epsilonneato only
dim wolffd@0: Gint22sfdp, fdp, neato only
dimen wolffd@0: Gint22sfdp, fdp, neato only
dir wolffd@0: EdirType wolffd@0: forward(directed)
none(undirected)
diredgeconstraints wolffd@0: Gstring
bool wolffd@0:
falseneato only
distortion wolffd@0: Ndouble0.0-100.0
dpi wolffd@0: Gdouble96.0
0.0
svg, bitmap output only
edgeURL wolffd@0: EescString wolffd@0: ""svg, map only
edgehref wolffd@0: EescString wolffd@0: ""svg, map only
edgetarget wolffd@0: EescString wolffd@0: <none>svg, map only
edgetooltip wolffd@0: EescString wolffd@0: ""svg, cmap only
epsilon wolffd@0: Gdouble.0001 * # nodes(mode == KK)
.0001(mode == major)
neato only
esep wolffd@0: Gdouble
pointf wolffd@0:
+3not dot
fillcolor wolffd@0: NCcolor wolffd@0: lightgrey(nodes)
black(clusters)
fixedsize wolffd@0: Nbool wolffd@0: false
fontcolor wolffd@0: ENGCcolor wolffd@0: black
fontname wolffd@0: ENGCstring"Times-Roman"
fontnames wolffd@0: Gstring""svg only
fontpath wolffd@0: Gstringsystem-dependent
fontsize wolffd@0: ENGCdouble14.01.0
group wolffd@0: Nstring""dot only
headURL wolffd@0: EescString wolffd@0: ""svg, map only
headclip wolffd@0: Ebool wolffd@0: true
headhref wolffd@0: EescString wolffd@0: ""svg, map only
headlabel wolffd@0: ElblString wolffd@0: ""
headport wolffd@0: EportPos wolffd@0: center
headtarget wolffd@0: EescString wolffd@0: <none>svg, map only
headtooltip wolffd@0: EescString wolffd@0: ""svg, cmap only
height wolffd@0: Ndouble0.50.02
href wolffd@0: EescString wolffd@0: ""svg, postscript, map only
id wolffd@0: GNElblString wolffd@0: ""svg, postscript, map only
image wolffd@0: Nstring""
imagescale wolffd@0: Nbool wolffd@0:
string
false
label wolffd@0: ENGClblString wolffd@0: "\N" (nodes)
"" (otherwise)
labelURL wolffd@0: EescString wolffd@0: ""svg, map only
labelangle wolffd@0: Edouble-25.0-180.0
labeldistance wolffd@0: Edouble1.00.0
labelfloat wolffd@0: Ebool wolffd@0: false
labelfontcolor wolffd@0: Ecolor wolffd@0: black
labelfontname wolffd@0: Estring"Times-Roman"
labelfontsize wolffd@0: Edouble14.01.0
labelhref wolffd@0: EescString wolffd@0: ""svg, map only
labeljust wolffd@0: GCstring"c"
labelloc wolffd@0: GCstring"t"(clusters)
"b"(root graphs)
labelloc wolffd@0: Nstring"c"(clusters)
labeltarget wolffd@0: EescString wolffd@0: <none>svg, map only
labeltooltip wolffd@0: EescString wolffd@0: ""svg, cmap only
landscape wolffd@0: Gbool wolffd@0: false
layer wolffd@0: ENlayerRange wolffd@0: ""
layers wolffd@0: GlayerList wolffd@0: ""
layersep wolffd@0: Gstring" :\t"
layout wolffd@0: Gstring""
len wolffd@0: Edouble1.0(neato)
0.3(fdp)
fdp, neato only
levels wolffd@0: GintMAXINT0.0sfdp only
levelsgap wolffd@0: Gdouble0.0neato only
lhead wolffd@0: Estring""dot only
lp wolffd@0: EGCpoint wolffd@0: write only
ltail wolffd@0: Estring""dot only
margin wolffd@0: NGdouble
pointf wolffd@0:
<device-dependent>
maxiter wolffd@0: Gint100 * # nodes(mode == KK)
200(mode == major)
600(fdp)
fdp, neato only
mclimit wolffd@0: Gdouble1.0dot only
mindist wolffd@0: Gdouble1.00.0circo only
minlen wolffd@0: Eint10dot only
mode wolffd@0: Gstring"major"neato only
model wolffd@0: Gstring"shortpath"neato only
mosek wolffd@0: Gbool wolffd@0: falseneato only
nodesep wolffd@0: Gdouble0.250.02dot only
nojustify wolffd@0: GCNEbool wolffd@0: false
normalize wolffd@0: Gbool wolffd@0: falsenot dot
nslimit wolffd@0:
nslimit1 wolffd@0:
Gdoubledot only
ordering wolffd@0: Gstring""dot only
orientation wolffd@0: Ndouble0.0360.0
orientation wolffd@0: Gstring""
outputorder wolffd@0: GoutputMode wolffd@0: breadthfirst
overlap wolffd@0: Gstring
bool wolffd@0:
truenot dot
overlap_scaling wolffd@0: Gdouble-4-1.0e10prism only
pack wolffd@0: Gbool wolffd@0:
int
falsenot dot
packmode wolffd@0: GpackMode wolffd@0: nodenot dot
pad wolffd@0: Gdouble
pointf wolffd@0:
0.0555 (4 points)
page wolffd@0: Gpointf wolffd@0:
pagedir wolffd@0: Gpagedir wolffd@0: BL
pencolor wolffd@0: Ccolor wolffd@0: black
penwidth wolffd@0: CNEdouble1.00.0
peripheries wolffd@0: NCintshape default(nodes)
1(clusters)
0
pin wolffd@0: Nbool wolffd@0: falsefdp, neato only
pos wolffd@0: ENpoint wolffd@0:
splineType wolffd@0:
quadtree wolffd@0: GquadType wolffd@0:
bool wolffd@0:
"normal"sfdp only
quantum wolffd@0: Gdouble0.00.0
rank wolffd@0: SrankType wolffd@0: dot only
rankdir wolffd@0: Grankdir wolffd@0: TBdot only
ranksep wolffd@0: Gdouble0.5(dot)
1.0(twopi)
0.02twopi, dot only
ratio wolffd@0: Gdouble
string
rects wolffd@0: Nrect wolffd@0: write only
regular wolffd@0: Nbool wolffd@0: false
remincross wolffd@0: Gbool wolffd@0: falsedot only
repulsiveforce wolffd@0: Gdouble1.00.0sfdp only
resolution wolffd@0: Gdouble96.0
0.0
svg, bitmap output only
root wolffd@0: GNstring
bool wolffd@0:
""(graphs)
false(nodes)
circo, twopi only
rotate wolffd@0: Gint0
samehead wolffd@0: Estring""dot only
sametail wolffd@0: Estring""dot only
samplepoints wolffd@0: Nint8(output)
20(overlap and image maps)
searchsize wolffd@0: Gint30dot only
sep wolffd@0: Gdouble
pointf wolffd@0:
+4not dot
shape wolffd@0: Nshape wolffd@0: ellipse
shapefile wolffd@0: Nstring""
showboxes wolffd@0: ENGint00dot only
sides wolffd@0: Nint40
size wolffd@0: Gpointf wolffd@0:
skew wolffd@0: Ndouble0.0-100.0
smoothing wolffd@0: GsmoothType wolffd@0: "none"sfdp only
sortv wolffd@0: GCNint00
splines wolffd@0: Gbool wolffd@0:
string
start wolffd@0: GstartType wolffd@0: ""fdp, neato only
style wolffd@0: ENCstyle wolffd@0:
stylesheet wolffd@0: Gstring""svg only
tailURL wolffd@0: EescString wolffd@0: ""svg, map only
tailclip wolffd@0: Ebool wolffd@0: true
tailhref wolffd@0: EescString wolffd@0: ""svg, map only
taillabel wolffd@0: ElblString wolffd@0: ""
tailport wolffd@0: EportPos wolffd@0: center
tailtarget wolffd@0: EescString wolffd@0: <none>svg, map only
tailtooltip wolffd@0: EescString wolffd@0: ""svg, cmap only
target wolffd@0: ENGCescString wolffd@0:
string
<none>svg, map only
tooltip wolffd@0: NECescString wolffd@0: ""svg, cmap only
truecolor wolffd@0: Gbool wolffd@0: bitmap output only
vertices wolffd@0: NpointfList wolffd@0: write only
viewport wolffd@0: GviewPort wolffd@0: ""
voro_margin wolffd@0: Gdouble0.050.0not dot
weight wolffd@0: Edouble1.00(dot)
1(neato,fdp,sfdp)
width wolffd@0: Ndouble0.750.01
z wolffd@0: Ndouble0.0-MAXFLOAT
-1000
wolffd@0:
wolffd@0:

Attribute Descriptions

wolffd@0:
wolffd@0:
Damping wolffd@0:
Factor damping force motions. On each iteration, a nodes movement wolffd@0: is limited to this factor of its potential motion. By being less than wolffd@0: 1.0, the system tends to ``cool'', thereby preventing cycling. wolffd@0: wolffd@0:
K wolffd@0:
Spring constant used in virtual physical model. It roughly corresponds wolffd@0: to an ideal edge length (in inches), in that increasing K tends to wolffd@0: increase the distance between nodes. wolffd@0: Note that the edge attribute len can be used to wolffd@0: override this value for adjacent nodes. wolffd@0: wolffd@0:
URL wolffd@0:
Hyperlinks incorporated into device-dependent output. wolffd@0: At present, used in ps2, cmap, i*map and svg formats. wolffd@0: For all these formats, URLs can be attached to nodes, edges and wolffd@0: clusters. URL attributes can also be attached to the root graph in ps2, wolffd@0: cmap and i*map formats. This serves as the base URL for relative URLs in the wolffd@0: former, and as the default image map file in the latter. wolffd@0:

wolffd@0: For svg, cmapx and imap output, the active area for a node is its wolffd@0: visible image. wolffd@0: For example, an unfilled wolffd@0: node with no drawn boundary will only be active on its label. wolffd@0: For other output, the active area is its bounding box. wolffd@0: The active area for a cluster is its bounding box. wolffd@0: For edges, the active areas are small circles where the edge contacts its head wolffd@0: and tail nodes. In addition, for svg, cmapx and imap, the active area wolffd@0: includes a thin polygon approximating the edge. The circles may wolffd@0: overlap the related node, and the edge URL dominates. wolffd@0: If the edge has a label, this will also be active. wolffd@0: Finally, if the edge has a head or tail label, this will also be active. wolffd@0:

wolffd@0: Note that, for edges, the attributes headURL, wolffd@0: tailURL, labelURL and wolffd@0: edgeURL allow control of various parts of an wolffd@0: edge. wolffd@0: Also note that, if active areas of two edges overlap, it is unspecified wolffd@0: which area dominates. wolffd@0: wolffd@0:

arrowhead wolffd@0:
Style of arrowhead on the head node of an edge. wolffd@0: See also the dir attribute, wolffd@0: and a limitation. wolffd@0: wolffd@0:
arrowsize wolffd@0:
Multiplicative scale factor for arrowheads. wolffd@0: wolffd@0:
arrowtail wolffd@0:
Style of arrowhead on the tail node of an edge. wolffd@0: See also the dir attribute, wolffd@0: and a limitation. wolffd@0: wolffd@0:
aspect wolffd@0:
Target aspect ratio (width of the layout divided by the height) wolffd@0: of the graph drawing. If unset, dot minimizes the total edge length. wolffd@0: For certain graphs, like those with large fan-in or fan-out, this can wolffd@0: lead to very wide layouts. Setting aspect will cause dot to try wolffd@0: to adjust the layout to get an aspect ratio close to that specified wolffd@0: by aspect. wolffd@0:

wolffd@0: By default, dot will do 5 passes attempting to achieve the desired wolffd@0: aspect ratio. For certain graphs, more passes will be needed to get wolffd@0: close enough. The aspect attribute can also be used to wolffd@0: specify the maximum number of passes to try. wolffd@0:

wolffd@0: At present, there is no mechanism for widening a very tall layout. wolffd@0: Also, the algorithm doesn't handle clusters, nor disconnected graphs. wolffd@0: For the latter case, one can split the pipeline
wolffd@0: ccomps -x | dot | gvpack | neato -n2 wolffd@0: to get a similar effect. wolffd@0: wolffd@0:

bb wolffd@0:
Bounding box of drawing in points. wolffd@0: wolffd@0:
bgcolor wolffd@0:
When attached to the root graph, this color is used as the background for wolffd@0: entire canvas. When a cluster attribute, it is used as the initial wolffd@0: background for the cluster. If a cluster has a filled wolffd@0: style, the wolffd@0: cluster's fillcolor will overlay the wolffd@0: background color. wolffd@0:

wolffd@0: If no background color is specified for the root graph, no graphics wolffd@0: operation are performed on the background. This works fine for wolffd@0: PostScript but for bitmap output, all bits are initialized to something. wolffd@0: This means that when the bitmap output is included in some other wolffd@0: document, all of the bits within the bitmap's bounding box will be wolffd@0: set, overwriting whatever color or graphics where already on the page. wolffd@0: If this effect is not desired, and you only want to set bits explicitly wolffd@0: assigned in drawing the graph, set bgcolor="transparent". wolffd@0: wolffd@0:

center wolffd@0:
If true, the drawing is centered in the output canvas. wolffd@0: wolffd@0:
charset wolffd@0:
Specifies the character encoding used when interpreting string input wolffd@0: as a text label. The default value is "UTF-8". wolffd@0: The other legal value is "iso-8859-1" or, wolffd@0: equivalently, wolffd@0: "Latin1". The charset attribute is case-insensitive. wolffd@0: Note that if the character encoding used in the input does not wolffd@0: match the charset value, the resulting output may be very strange. wolffd@0: wolffd@0:
clusterrank wolffd@0:
Mode used for handling clusters. If clusterrank is "local", a wolffd@0: subgraph whose name begins with "cluster" is given special treatment. wolffd@0: The subgraph is laid out separately, and then integrated as a unit into wolffd@0: its parent graph, with a bounding rectangle drawn about it. wolffd@0: If the cluster has a label parameter, this label wolffd@0: is displayed within the rectangle. wolffd@0: Note also that there can be clusters within clusters. wolffd@0: At present, the modes "global" and "none" wolffd@0: appear to be identical, both turning off the special cluster processing. wolffd@0: wolffd@0:
color wolffd@0:
Basic drawing color for graphics, not text. For the latter, use the wolffd@0: fontcolor attribute. wolffd@0:

wolffd@0: For edges, the value wolffd@0: can either be a single color or a colorList. wolffd@0: In the latter case, the edge is drawn using parallel splines or lines, wolffd@0: one for each color in the list, in the order given. wolffd@0: The head arrow, if any, is drawn using the first color in the list, wolffd@0: and the tail arrow, if any, the second color. This supports the common wolffd@0: case of drawing opposing edges, but using parallel splines instead of wolffd@0: separately routed multiedges. For example, the graph wolffd@0:

wolffd@0:   digraph G {
wolffd@0:     a -> b [dir=both color="red:blue"]
wolffd@0:   }
wolffd@0:   
wolffd@0: yields
wolffd@0: wolffd@0: wolffd@0:
colorscheme wolffd@0:
This attribute specifies a color scheme namespace. If defined, it specifies wolffd@0: the context for interpreting color names. In particular, if a wolffd@0: color value has form "xxx" or "//xxx", wolffd@0: then the wolffd@0: color xxx will be evaluated according to the current color scheme. wolffd@0: If no color scheme is set, the standard X11 naming is used. wolffd@0: For example, if colorscheme=bugn9, then color=7 wolffd@0: is interpreted as "/bugn9/7". wolffd@0: wolffd@0:
comment wolffd@0:
Comments are inserted into output. Device-dependent wolffd@0: wolffd@0:
compound wolffd@0:
If true, allow edges between clusters. (See lhead wolffd@0: and ltail below.) wolffd@0: wolffd@0:
concentrate wolffd@0:
If true, use edge concentrators. wolffd@0: This merges multiedges into a single edge and causes partially parallel wolffd@0: edges to share part of their paths. The latter feature is not yet available wolffd@0: outside of dot. wolffd@0: wolffd@0:
constraint wolffd@0:
If false, the edge is not used in ranking the nodes. For example, wolffd@0: in the graph wolffd@0:
wolffd@0:   digraph G {
wolffd@0:     a -> c;
wolffd@0:     a -> b;
wolffd@0:     b -> c [constraint=false];
wolffd@0:   }
wolffd@0:   
wolffd@0: the edge b -> c does not add a constraint during rank wolffd@0: assignment, so the only constraints are that a be above b and c, wolffd@0: yielding the graph:
wolffd@0: wolffd@0: wolffd@0:
decorate wolffd@0:
If true, attach edge label to edge by a 2-segment wolffd@0: polyline, underlining the label, then going to the closest point of spline. wolffd@0: wolffd@0:
defaultdist wolffd@0:
This specifies the distance between nodes in separate connected wolffd@0: components. If set too small, connected components may overlap. wolffd@0: Only applicable if pack=false. wolffd@0: wolffd@0:
dim wolffd@0:
Set the number of dimensions used for the layout. The maximum value wolffd@0: allowed is 10. wolffd@0: wolffd@0:
dimen wolffd@0:
Set the number of dimensions used for rendering. wolffd@0: The maximum value allowed is 10. wolffd@0: If both dimen and dim are set, the latter specifies wolffd@0: the dimension used for layout, and the former for rendering. wolffd@0: If only dimen is set, this is used for both layout and rendering wolffd@0: dimensions. wolffd@0: wolffd@0:
dir wolffd@0:
Set edge type for drawing arrowheads. This indicates which ends of the wolffd@0: edge should be decorated with an arrowhead. The actual style of the wolffd@0: arrowhead can be specified using the arrowhead wolffd@0: and arrowtail attributes. wolffd@0: See limitation. wolffd@0: wolffd@0:
diredgeconstraints wolffd@0:
Only valid when mode="ipsep". wolffd@0: If true, constraints are generated for each edge in the largest (heuristic) wolffd@0: directed acyclic subgraph such that the edge must point downwards. wolffd@0: If "hier", generates level constraints similar to those used with wolffd@0: mode="hier". The main difference is that, in the latter wolffd@0: case, only these constraints are involved, so a faster solver can be used. wolffd@0: wolffd@0:
distortion wolffd@0:
Distortion factor for shape=polygon. wolffd@0: Positive values cause top part to wolffd@0: be larger than bottom; negative values do the opposite. wolffd@0: wolffd@0:
dpi wolffd@0:
This specifies the expected number of pixels per inch on a display device. wolffd@0: For bitmap output, this guarantees that text rendering will be wolffd@0: done more accurately, both in size and in placement. For SVG output, wolffd@0: it is used to guarantee that the dimensions in the output correspond to wolffd@0: the correct number of points or inches. wolffd@0: wolffd@0:
edgeURL wolffd@0:
If edgeURL is defined, this is the link used for the non-label wolffd@0: parts of an edge. This value overrides any URL wolffd@0: defined for the edge. wolffd@0: Also, this value is used near the head or tail node unless overridden wolffd@0: by a headURL or tailURL value, wolffd@0: respectively. wolffd@0: See limitation. wolffd@0: wolffd@0:
edgehref wolffd@0:
Synonym for edgeURL. wolffd@0: wolffd@0:
edgetarget wolffd@0:
If the edge has a URL or edgeURL wolffd@0: attribute, this attribute determines which window of the wolffd@0: browser is used wolffd@0: for the URL attached to the non-label part of the edge. wolffd@0: Setting it to "_graphviz" will open a new window if it wolffd@0: doesn't already exist, or reuse it if it does. wolffd@0: If undefined, the value of the target is used. wolffd@0: wolffd@0:
edgetooltip wolffd@0:
Tooltip annotation attached to the non-label part of an edge. wolffd@0: This is used only if the edge has a URL wolffd@0: or edgeURL attribute. wolffd@0: wolffd@0:
epsilon wolffd@0:
Terminating condition. If the length squared of all energy gradients are wolffd@0: < epsilon, the algorithm stops. wolffd@0: wolffd@0:
esep wolffd@0:
Margin used around polygons for purposes of spline edge routing. wolffd@0: The interpretation is the same as given for sep. wolffd@0: This should normally be strictly less than sep. wolffd@0: wolffd@0:
fillcolor wolffd@0:
Color used to fill the background of a node or cluster wolffd@0: assuming style=filled. wolffd@0: If fillcolor is not defined, color is wolffd@0: used. (For clusters, if color is not defined, wolffd@0: bgcolor is used.) If this is not defined, wolffd@0: the default is used, except for wolffd@0: shape=point or when the output wolffd@0: format is MIF, wolffd@0: which use black by default. wolffd@0:

wolffd@0: Note that a cluster inherits the root graph's attributes if defined. wolffd@0: Thus, if the root graph has defined a fillcolor, this will override a wolffd@0: color or bgcolor attribute set for the cluster. wolffd@0: wolffd@0:

fixedsize wolffd@0:
If true, the node size is specified by the values of the wolffd@0: width wolffd@0: and height attributes only wolffd@0: and is not expanded to contain the text label. wolffd@0: wolffd@0:
fontcolor wolffd@0:
Color used for text. wolffd@0: wolffd@0:
fontname wolffd@0:
Font used for text. This very much depends on the output format and, for wolffd@0: non-bitmap output such as PostScript or SVG, the availability of the font wolffd@0: when the graph is displayed or printed. As such, it is best to rely on wolffd@0: font faces that are generally available, such as Times-Roman, Helvetica or wolffd@0: Courier. wolffd@0:

wolffd@0: If Graphviz was built using the wolffd@0: fontconfig library, the latter library wolffd@0: will be used to search for the font. However, if the fontname string wolffd@0: contains a slash character "/", it is treated as a pathname for the font wolffd@0: file, though font lookup will append the usual font suffixes. wolffd@0:

wolffd@0: If Graphviz does not use fontconfig, fontname will be wolffd@0: considered the name of a Type 1 or True Type font file. wolffd@0: If you specify fontname=schlbk, the tool will look for a wolffd@0: file named schlbk.ttf or schlbk.pfa or schlbk.pfb wolffd@0: in one of the directories specified by wolffd@0: the fontpath attribute. wolffd@0: The lookup does support various aliases for the common fonts. wolffd@0: wolffd@0:

fontnames wolffd@0:
Allows user control of how basic fontnames are represented in SVG output. wolffd@0: If fontnames is undefined or "svg", wolffd@0: the output will try to use known SVG fontnames. For example, the wolffd@0: default font "Times-Roman" will be mapped to the wolffd@0: basic SVG font "serif". This can be overridden by setting wolffd@0: fontnames to "ps" or "gd". wolffd@0: In the former case, known PostScript font names such as wolffd@0: "Times-Roman" will be used in the output. wolffd@0: In the latter case, the fontconfig font conventions wolffd@0: are used. Thus, "Times-Roman" would be treated as wolffd@0: "Nimbus Roman No9 L". These last two options are useful wolffd@0: with SVG viewers that support these richer fontname spaces. wolffd@0: wolffd@0:
fontpath wolffd@0:
Directory list used by libgd to search for bitmap fonts if Graphviz wolffd@0: was not built with the fontconfig library. wolffd@0: If fontpath is not set, the environment wolffd@0: variable DOTFONTPATH is checked. wolffd@0: If that is not set, GDFONTPATH is checked. wolffd@0: If not set, libgd uses its compiled-in font path. wolffd@0: Note that fontpath is an attribute of the root graph. wolffd@0: wolffd@0:
fontsize wolffd@0:
Font size, in points, used for text. wolffd@0: wolffd@0:
group wolffd@0:
If the end points of an edge belong to the same group, i.e., have the wolffd@0: same group attribute, parameters are set to avoid crossings and keep wolffd@0: the edges straight. wolffd@0: wolffd@0:
headURL wolffd@0:
If headURL is defined, it is wolffd@0: output as part of the head label of the edge. wolffd@0: Also, this value is used near the head node, overriding any wolffd@0: URL value. wolffd@0: See limitation. wolffd@0: wolffd@0:
headclip wolffd@0:
If true, the head of an edge is clipped to the boundary of the head node; wolffd@0: otherwise, the end of the edge goes to the center of the node, or the wolffd@0: center of a port, if applicable. wolffd@0: wolffd@0:
headhref wolffd@0:
Synonym for headURL. wolffd@0: wolffd@0:
headlabel wolffd@0:
Text label to be placed near head of edge. wolffd@0: See limitation. wolffd@0: wolffd@0:
headport wolffd@0:
Indicates where on the head node to attach the head of the edge. wolffd@0: In the default case, the edge is aimed towards the center of the node, wolffd@0: and then clipped at the node boundary. wolffd@0: See limitation. wolffd@0: wolffd@0:
headtarget wolffd@0:
If the edge has a headURL, wolffd@0: this attribute determines which window of the wolffd@0: browser is used wolffd@0: for the URL. Setting it to "_graphviz" will open a new window if it wolffd@0: doesn't already exist, or reuse it if it does. wolffd@0: If undefined, the value of the target is used. wolffd@0: wolffd@0:
headtooltip wolffd@0:
Tooltip annotation attached to the head of an edge. This is used only wolffd@0: if the edge has a headURL attribute. wolffd@0: wolffd@0:
height wolffd@0:
Height of node, in inches. This is taken as the initial, minimum height wolffd@0: of the node. If fixedsize is true, this wolffd@0: will be the final height of the node. Otherwise, if the node label wolffd@0: requires more height to fit, the node's height will be increased to wolffd@0: contain the label. Note also that, if the output format is dot, the wolffd@0: value given to height will be the final value. wolffd@0: wolffd@0:
href wolffd@0:
Synonym for URL. wolffd@0: wolffd@0:
id wolffd@0:
Allows the graph author to provide an id for graph objects which is to be included in the output. wolffd@0: Normal "N", "E", "G" substitutions are applied. wolffd@0: If provided, it is the reponsiblity of the provider to keep wolffd@0: its values sufficiently unique for its intended downstream use. wolffd@0: Note, in particular, that "E" does not provide a unique id for multi-edges. wolffd@0: If no id attribute is provided, then a unique internal id is used, however this value is unpredictable by the graph writer. wolffd@0: An externally provided id is not used internally. wolffd@0: wolffd@0:
image wolffd@0:
Gives the name of a file containing an image to be displayed inside wolffd@0: a node. The image file must be in one of the recognized wolffd@0: formats, wolffd@0: typically JPEG, PNG, GIF or Postscript, and be able to be converted wolffd@0: into the desired output format. wolffd@0:

wolffd@0: Unlike with the shapefile attribute, wolffd@0: the image is treated as node wolffd@0: content rather than the entire node. In particular, an image can wolffd@0: be contained in a node of any shape, not just a rectangle. wolffd@0: wolffd@0:

imagescale wolffd@0:
Attribute controlling how an image fills its wolffd@0: containing node. In general, the image is given its natural size, wolffd@0: (cf. dpi), wolffd@0: and the node size is made large enough to contain its image, its wolffd@0: label, its margin, and its peripheries. wolffd@0: Its width and height will also be at least as large as its wolffd@0: minimum width and height. wolffd@0: If, however, fixedsize=true, wolffd@0: the width and height attributes specify the exact size of the node. wolffd@0:

wolffd@0: During rendering, in the default case (imagescale=false), wolffd@0: the image retains its natural size. wolffd@0: If imagescale=true, wolffd@0: the image is uniformly scaled (i.e., its aspect ratio is wolffd@0: preserved) to fit inside the node. wolffd@0: At least one dimension of the image will be as large as possible wolffd@0: given the size of the node. wolffd@0: When imagescale=width, wolffd@0: the width of the image is scaled to fill the node width. wolffd@0: The corresponding property holds when imagescale=height. wolffd@0: When imagescale=both, wolffd@0: both the height and the width are scaled separately to fill the node. wolffd@0:

wolffd@0: In all cases, if a dimension of the image is larger than the wolffd@0: corresponding dimension of the node, that dimension of the wolffd@0: image is scaled down to fit the node. As with the case of wolffd@0: expansion, if imagescale=true, width and height are wolffd@0: scaled uniformly. wolffd@0: wolffd@0:

label wolffd@0:
Text label attached to objects. wolffd@0: If a node's shape is record, then the label can wolffd@0: have a special format wolffd@0: which describes the record layout. wolffd@0: wolffd@0:
labelURL wolffd@0:
If labelURL is defined, this is the link used for the label wolffd@0: of an edge. This value overrides any URL wolffd@0: defined for the edge. wolffd@0: wolffd@0:
labelangle wolffd@0:
This, along with labeldistance, determine wolffd@0: where the wolffd@0: headlabel (taillabel) are placed with respect to the head (tail) wolffd@0: in polar coordinates. The origin in the coordinate system is wolffd@0: the point where the edge touches the node. The ray of 0 degrees wolffd@0: goes from the origin back along the edge, parallel to the edge wolffd@0: at the origin. wolffd@0:

wolffd@0: The angle, in degrees, specifies the rotation from the 0 degree ray, wolffd@0: with positive angles moving counterclockwise and negative angles wolffd@0: moving clockwise. wolffd@0: wolffd@0:

labeldistance wolffd@0:
Multiplicative scaling factor adjusting the distance that wolffd@0: the headlabel(taillabel) is from the head(tail) node. wolffd@0: The default distance is 10 points. See labelangle wolffd@0: for more details. wolffd@0: wolffd@0:
labelfloat wolffd@0:
If true, allows edge labels to be less constrained in position. wolffd@0: In particular, it may appear on top of other edges. wolffd@0: wolffd@0:
labelfontcolor wolffd@0:
Color used for headlabel and taillabel. wolffd@0: If not set, defaults to edge's fontcolor. wolffd@0: wolffd@0:
labelfontname wolffd@0:
Font used for headlabel and taillabel. wolffd@0: If not set, defaults to edge's fontname. wolffd@0: wolffd@0:
labelfontsize wolffd@0:
Font size, in points, used for headlabel and taillabel. wolffd@0: If not set, defaults to edge's fontsize. wolffd@0: wolffd@0:
labelhref wolffd@0:
Synonym for labelURL. wolffd@0: wolffd@0:
labeljust wolffd@0:
Justification for cluster labels. If "r", the label wolffd@0: is right-justified within bounding rectangle; if "l", left-justified; wolffd@0: else the label is centered. wolffd@0: Note that a subgraph inherits attributes from its parent. Thus, if wolffd@0: the root graph sets labeljust to "l", the subgraph inherits wolffd@0: this value. wolffd@0: wolffd@0:
labelloc wolffd@0:
Top/bottom placement of graph and cluster labels. wolffd@0: If the attribute is "t", place label at the top; wolffd@0: if the attribute is "b", place label at the bottom. wolffd@0: By default, root wolffd@0: graph labels go on the bottom and cluster labels go on the top. wolffd@0: Note that a subgraph inherits attributes from its parent. Thus, if wolffd@0: the root graph sets labelloc to "b", the subgraph inherits wolffd@0: this value. wolffd@0: wolffd@0:
labelloc wolffd@0:
Vertical placement of node label. By default, if the height of a node wolffd@0: is larger than the height of its label, the label is vertically centered. wolffd@0: If labelloc is set to "t", "c", or "b", the label is aligned wolffd@0: with the top, centered, or aligned with the bottom of the node, respectively. wolffd@0: wolffd@0:
labeltarget wolffd@0:
If the edge has a URL or labelURL wolffd@0: attribute, this attribute determines which window of the wolffd@0: browser is used wolffd@0: for the URL attached to the label. wolffd@0: Setting it to "_graphviz" will open a new window if it wolffd@0: doesn't already exist, or reuse it if it does. wolffd@0: If undefined, the value of the target is used. wolffd@0: wolffd@0:
labeltooltip wolffd@0:
Tooltip annotation attached to label of an edge. wolffd@0: This is used only if the edge has a URL wolffd@0: or labelURL attribute. wolffd@0: wolffd@0:
landscape wolffd@0:
If true, the graph is rendered in landscape mode. Synonymous with wolffd@0: rotate=90 or wolffd@0: orientation=landscape. wolffd@0: wolffd@0:
layer wolffd@0:
Specifies layers in which the node or edge is present. wolffd@0: wolffd@0:
layers wolffd@0:
Specifies a linearly ordered list of layer names attached to the graph wolffd@0: The graph is then output in separate layers. Only those components wolffd@0: belonging to the current output layer appear. For more information, wolffd@0: see the page How to use drawing layers (overlays). wolffd@0: wolffd@0:
layersep wolffd@0:
Specifies the separator characters used to split the wolffd@0: layers attribute into a list of layer names. wolffd@0: wolffd@0:
layout wolffd@0:
Specifies the name of the layout algorithm to use, such as "dot" wolffd@0: or "neato". Normally, graphs should be kept independent of a type of wolffd@0: layout. In some cases, however, it can be convenient to embed the type wolffd@0: of layout desired within the graph. For example, a graph containing wolffd@0: position information from a layout might want to record what the wolffd@0: associated layout algorithm was. wolffd@0:

wolffd@0: This attribute takes precedence over wolffd@0: the -K flag wolffd@0: or the actual command name used. wolffd@0: wolffd@0:

len wolffd@0:
Preferred edge length, in inches. wolffd@0: wolffd@0:
levels wolffd@0:
Number of levels allowed in the multilevel scheme. wolffd@0: wolffd@0:
levelsgap wolffd@0:
Specifies strictness of level constraints in neato wolffd@0: when mode="ipsep" or "hier". wolffd@0: Larger positive values mean stricter constraints, which demand more wolffd@0: separation between levels. On the other hand, negative values will relax wolffd@0: the constraints by allowing some overlap between the levels. wolffd@0: wolffd@0:
lhead wolffd@0:
Logical head of an edge. When compound is true, wolffd@0: if lhead is defined and is the name of a cluster containing wolffd@0: the real head, wolffd@0: the edge is clipped to the boundary of the cluster. wolffd@0: See limitation. wolffd@0: wolffd@0:
lp wolffd@0:
Label position, in points. wolffd@0: The position indicates the center of the label. wolffd@0: wolffd@0:
ltail wolffd@0:
Logical tail of an edge. When compound is true, wolffd@0: if ltail is defined and is the name of a cluster wolffd@0: containing the real tail, wolffd@0: the edge is clipped to the boundary of the cluster. wolffd@0: See limitation. wolffd@0: wolffd@0:
margin wolffd@0:
For graphs, this sets x and y margins of canvas, in inches. If the margin wolffd@0: is a single double, both margins are set equal to the given value. wolffd@0:

wolffd@0: Note that the margin is not part of the drawing but just empty space wolffd@0: left around the drawing. It basically corresponds to a translation of wolffd@0: drawing, as would be necessary to center a drawing on a page. Nothing wolffd@0: is actually drawn in the margin. To actually extend the background of wolffd@0: a drawing, see the pad attribute. wolffd@0:

wolffd@0: For nodes, this attribute specifies space left around the node's label. wolffd@0: By default, the value is 0.11,0.055. wolffd@0: wolffd@0:

maxiter wolffd@0:
Sets the number of iterations used. wolffd@0: wolffd@0:
mclimit wolffd@0:
Multiplicative scale factor used to alter the MinQuit (default = 8) wolffd@0: and MaxIter (default = 24) parameters used during crossing wolffd@0: minimization. These correspond to the wolffd@0: number of tries without improvement before quitting and the wolffd@0: maximum number of iterations in each pass. wolffd@0: wolffd@0:
mindist wolffd@0:
Specifies the minimum separation between all nodes. wolffd@0: wolffd@0:
minlen wolffd@0:
Minimum edge length (rank difference between head and tail). wolffd@0: wolffd@0:
mode wolffd@0:
Technique for optimizing the layout. If mode is "major", wolffd@0: neato uses stress majorization. If mode is "KK", wolffd@0: neato uses a version of the gradient descent method. The only advantage wolffd@0: to the latter technique is that it is sometimes appreciably faster for wolffd@0: small (number of nodes < 100) graphs. A significant disadvantage is that wolffd@0: it may cycle. wolffd@0:

wolffd@0: There are two new, experimental modes in neato, "hier", which adds a top-down wolffd@0: directionality similar to the layout used in dot, and "ipsep", which wolffd@0: allows the graph to specify minimum vertical and horizontal distances wolffd@0: between nodes. (See the sep attribute.) wolffd@0: wolffd@0:

model wolffd@0:
This value specifies how the distance matrix is computed for the input wolffd@0: graph. The distance matrix specifies the ideal distance between every wolffd@0: pair of nodes. neato attemps to find a layout which best achieves wolffd@0: these distances. By default, it uses the length of the shortest path, wolffd@0: where the length of each edge is given by its len wolffd@0: attribute. If model is "circuit", neato uses the wolffd@0: circuit resistance wolffd@0: model to compute the distances. This tends to emphasize clusters. If wolffd@0: model is "subset", neato uses the subset model. This sets the wolffd@0: edge length to be the number of nodes that are neighbors of exactly one wolffd@0: of the end points, and then calculates the shortest paths. This helps wolffd@0: to separate nodes with high degree. wolffd@0: wolffd@0:
mosek wolffd@0:
If Graphviz is built with MOSEK defined, mode=ipsep and mosek=true, wolffd@0: the Mosek software (www.mosek.com) is use to solve the ipsep constraints. wolffd@0: wolffd@0:
nodesep wolffd@0:
Minimum space between two adjacent nodes in the same rank, in inches. wolffd@0: wolffd@0:
nojustify wolffd@0:
By default, the justification of multi-line labels is done within the wolffd@0: largest context that makes sense. Thus, in the label of a polygonal wolffd@0: node, a left-justified line will align with the left side of the node wolffd@0: (shifted by the prescribed margin). wolffd@0: In record nodes, left-justified wolffd@0: line will line up with the left side of the enclosing column of fields. wolffd@0: If nojustify is "true", multi-line labels will be justified wolffd@0: in the context of itself. For example, if the attribute is set, wolffd@0: the first label line is long, and the second is shorter and left-justified, wolffd@0: the second will align with the left-most character in the first line, wolffd@0: regardless of how large the node might be. wolffd@0: wolffd@0:
normalize wolffd@0:
If set, normalize coordinates of final wolffd@0: layout so that the first point is at the origin, and then rotate the wolffd@0: layout so that the first edge is horizontal. wolffd@0: wolffd@0:
nslimit wolffd@0: ,
nslimit1 wolffd@0:
Used to set number of iterations in wolffd@0: network simplex applications. nslimit is used in wolffd@0: computing node x coordinates, nslimit1 for ranking nodes. wolffd@0: If defined, # iterations = nslimit(1) * # nodes; wolffd@0: otherwise, # iterations = MAXINT. wolffd@0: wolffd@0:
ordering wolffd@0:
If "out" for a graph G, and n is a node in G, then edges n->* appear wolffd@0: left-to-right in the same order in which they are defined. wolffd@0: If "in", the edges *->n appear wolffd@0: left-to-right in the same order in which they are defined for all wolffd@0: nodes n. wolffd@0: wolffd@0:
orientation wolffd@0:
Angle, in degrees, used to rotate polygon node shapes. For any number of polygon sides, 0 degrees rotation results in a flat base. wolffd@0: wolffd@0:
orientation wolffd@0:
If "[lL]*", set graph orientation to landscape wolffd@0: Used only if rotate is not defined. wolffd@0: wolffd@0:
outputorder wolffd@0:
Specify order in which nodes and edges are drawn. wolffd@0: wolffd@0:
overlap wolffd@0:
Determines if and how node overlaps should be removed. Nodes are first wolffd@0: enlarged using the sep attribute. wolffd@0: If "true" , overlaps are retained. wolffd@0: If the value is "scale", overlaps are removed by uniformly scaling in x and y. wolffd@0: If the value converts to "false", node overlaps are removed by a wolffd@0: Voronoi-based technique. wolffd@0: If the value is "scalexy", x and y are separately wolffd@0: scaled to remove overlaps. wolffd@0:

wolffd@0: If sfdp is available, one can set overlap to "prism" to use a wolffd@0: proximity graph-based algorithm for overlap removal. wolffd@0: This is the preferred technique, wolffd@0: though "scale" and "false" can work well with small graphs. wolffd@0: This technique starts with a wolffd@0: small scaling up, controlled by the wolffd@0: overlap_scaling attribute, wolffd@0: which can remove a significant portion of the overlap. wolffd@0: The prism option also accepts an optional non-negative integer suffix. wolffd@0: This can be used to control the number of attempts made at overlap wolffd@0: removal. By default, overlap="prism" is equivalent to wolffd@0: overlap="prism1000". Setting overlap="prism0" wolffd@0: causes only the scaling phase to be run. wolffd@0:

wolffd@0: If the value is "compress", the layout will be scaled down as much as wolffd@0: possible without introducing any overlaps, obviously assuming there are wolffd@0: none to begin with. wolffd@0:

wolffd@0: N.B.The remaining allowed values of overlap wolffd@0: correspond to algorithms which, at present, can produce bad aspect ratios. wolffd@0: In addition, we deprecate the use of the "ortho*" and "portho*". wolffd@0:

wolffd@0: If the value is "vpsc", overlap removal is done as a wolffd@0: quadratic optimization to minimize node displacement while removing wolffd@0: node overlaps. wolffd@0:

wolffd@0: If the value is "orthoxy" or "orthoyx", overlaps wolffd@0: are moved by optimizing two constraint problems, one for the x axis and wolffd@0: one for the y. The suffix indicates which axis is processed first. wolffd@0: If the value is "ortho", the technique is similar to "orthoxy" except a wolffd@0: heuristic is used to reduce the bias between the two passes. wolffd@0: If the value is "ortho_yx", the technique is the same as "ortho", except wolffd@0: the roles of x and y are reversed. wolffd@0: The values "portho", "porthoxy", "porthoxy", and "portho_yx" are similar wolffd@0: to the previous four, except only pseudo-orthogonal ordering is wolffd@0: enforced. wolffd@0:

wolffd@0: If the layout is done by neato with mode="ipsep", wolffd@0: then one can use overlap=ipsep. wolffd@0: In this case, the overlap removal constraints are wolffd@0: incorporated into the layout algorithm itself. wolffd@0: N.B. At present, this only supports one level of clustering. wolffd@0:

wolffd@0: Except for fdp and sfdp, the layouts assume overlap="true" as the default. wolffd@0: Fdp first uses a number of passes using built-in, force-directed technique wolffd@0: to remove overlaps. Thus, fdp accepts overlap with an integer wolffd@0: prefix followed by a colon, specifying the number of tries. If there is wolffd@0: no prefix, no initial tries will be performed. If there is nothing following wolffd@0: a colon, none of the above methods will be attempted. By default, fdp wolffd@0: uses overlap="9:portho". Note that overlap="true", wolffd@0: overlap="0:true" and overlap="0:" all turn off all overlap wolffd@0: removal. wolffd@0:

wolffd@0: By default, sfdp uses overlap="prism0". wolffd@0:

wolffd@0: Except for the Voronoi and prism methods, all of these transforms preserve the wolffd@0: orthogonal ordering of the original layout. That is, if the x coordinates wolffd@0: of two nodes are originally the same, they will remain the same, and if wolffd@0: the x coordinate of one node is originally less than the x coordinate of wolffd@0: another, this relation will still hold in the transformed layout. The wolffd@0: similar properties hold for the y coordinates. wolffd@0: This is not quite true for the "porth*" cases. For these, orthogonal wolffd@0: ordering is only preserved among nodes related by an edge. wolffd@0: wolffd@0:

overlap_scaling wolffd@0:
When overlap=prism, the layout is scaled by this factor, thereby wolffd@0: removing a fair amount of node overlap, and making node overlap removal wolffd@0: faster and better able to retain the graph's shape. wolffd@0:

wolffd@0: If overlap_scaling is negative, the layout is scaled by wolffd@0: -1*overlap_scaling times the average label size. wolffd@0: If overlap_scaling is positive, the layout is scaled by wolffd@0: overlap_scaling. wolffd@0: If overlap_scaling is zero, no scaling is done. wolffd@0: wolffd@0:

pack wolffd@0:
This is true if the value of pack is "true" (case-insensitive) or a wolffd@0: non-negative integer. If true, each connected component of the graph is wolffd@0: laid out separately, and then the graphs are packed together. wolffd@0: If pack has an integral value, this is used as the size, wolffd@0: in points, of wolffd@0: a margin around each part; otherwise, a default margin of 8 is used. wolffd@0: If pack is interpreted as false, the entire graph is laid out together. wolffd@0: The granularity and method of packing is influenced by the wolffd@0: packmode attribute. wolffd@0:

wolffd@0: For layouts which always do packing, such a twopi, the pack wolffd@0: attribute is just used to set the margin. wolffd@0: wolffd@0:

packmode wolffd@0:
This indicates how connected components should be packed wolffd@0: (cf. packMode). Note that defining wolffd@0: packmode will automatically turn on packing as though one had wolffd@0: set pack=true. wolffd@0: wolffd@0:
pad wolffd@0:
The pad attribute specifies how much, in inches, to extend the wolffd@0: drawing area around the minimal area needed to draw the graph. wolffd@0: If the pad is a single double, both the x and y pad values are set wolffd@0: equal to the given value. This area is part of the wolffd@0: drawing and will be filled with the background color, if appropriate. wolffd@0:

wolffd@0: Normally, a small pad is used for aesthetic reasons, especially when wolffd@0: a background color is used, to avoid having nodes and edges abutting wolffd@0: the boundary of the drawn region. wolffd@0: wolffd@0:

page wolffd@0:
Width and height of output pages, in inches. If this is set and is wolffd@0: smaller than the size of the layout, a rectangular array of pages of wolffd@0: the specified page size is overlaid on the layout, with origins wolffd@0: aligned in the lower-left corner, thereby partitioning the layout wolffd@0: into pages. The pages are then produced one at a time, in wolffd@0: pagedir order. wolffd@0:

wolffd@0: At present, this only works for PostScript output. For other types of wolffd@0: output, one should use another tool to split the output into multiple wolffd@0: output files. Or use the viewport to generate wolffd@0: multiple files. wolffd@0: wolffd@0:

pagedir wolffd@0:
If the page attribute is set and applicable, wolffd@0: this attribute specifies the order in which the pages are emitted. wolffd@0: This is limited to one of the 8 row or column major orders. wolffd@0: wolffd@0:
pencolor wolffd@0:
Color used to draw the bounding box around a cluster. wolffd@0: If pencolor is not defined, color is wolffd@0: used. If this is not defined, bgcolor is used. wolffd@0: If this is not defined, the default is used. wolffd@0:

wolffd@0: Note that a cluster inherits the root graph's attributes if defined. wolffd@0: Thus, if the root graph has defined a pencolor, this will override a wolffd@0: color or bgcolor attribute set for the cluster. wolffd@0: wolffd@0:

penwidth wolffd@0:
Specifies the width of the pen, in points, used to draw lines and curves, wolffd@0: including the boundaries of edges and clusters. The value is inherited wolffd@0: by subclusters. wolffd@0: It has no effect on text. wolffd@0:

wolffd@0: Previous to 31 January 2008, the effect of penwidth=W wolffd@0: was achieved by including setlinewidth(W) wolffd@0: as part of a style specification. wolffd@0: If both are used, penwidth will be used. wolffd@0: wolffd@0:

peripheries wolffd@0:
Set number of peripheries used in polygonal shapes and cluster wolffd@0: boundaries. Note that wolffd@0: user-defined shapes are treated as a wolffd@0: form of box shape, so the default wolffd@0: peripheries value is 1 and the user-defined shape will be drawn in wolffd@0: a bounding rectangle. Setting peripheries=0 will turn this off. wolffd@0: Also, 1 is the maximum peripheries value for clusters. wolffd@0: wolffd@0:
pin wolffd@0:
If true and the node has a pos attribute on input, neato or fdp prevents the wolffd@0: node from moving from the input position. This property can also be specified wolffd@0: in the pos attribute itself (cf. the point type). wolffd@0:

wolffd@0: Note: Due to an artifact of the implementation, final coordinates wolffd@0: are translated to the origin. Thus, if you look at the output coordinates wolffd@0: given in the (x)dot or plain format, pinned nodes will not have the same wolffd@0: output coordinates as were given on input. If this is important, a wolffd@0: simple workaround is to maintain the coordinates of a pinned node. The vector wolffd@0: difference between the old and new coordinates will give the translation, wolffd@0: which can then be subtracted from all of the appropriate coordinates. wolffd@0: wolffd@0:

pos wolffd@0:
Position of node, or spline control points. wolffd@0: For nodes, the position indicates the center of the node. wolffd@0: On output, the coordinates are in points. wolffd@0:

wolffd@0: In neato and fdp, pos can be used to set the initial position of a node. wolffd@0: By default, the coordinates are assumed to be in inches. However, the wolffd@0: -s command line flag can be used to specify wolffd@0: different units. As the output coordinates are in points, wolffd@0: feeding the output of a graph laid out by a Graphviz program into wolffd@0: neato or fdp will almost always require the -s flag. wolffd@0:

wolffd@0: When the -n command line flag is used with wolffd@0: neato, it is assumed the positions have been set by one of the layout wolffd@0: programs, and are therefore in points. Thus, neato -n can accept wolffd@0: input correctly without requiring a -s flag and, in fact, wolffd@0: ignores any such flag. wolffd@0: wolffd@0:

quadtree wolffd@0:
Quadtree scheme to use. wolffd@0:

wolffd@0: A TRUE bool value corresponds to "normal"; wolffd@0: a FALSE bool value corresponds to "none". wolffd@0: As a slight exception to the normal interpretation of bool, wolffd@0: a value of "2" corresponds to "fast". wolffd@0: wolffd@0:

quantum wolffd@0:
If quantum > 0.0, node label dimensions wolffd@0: will be rounded to integral multiples of the quantum. wolffd@0: wolffd@0:
rank wolffd@0:
Rank constraints on the nodes in a subgraph. wolffd@0: If rank="same", all nodes are placed on the same rank. wolffd@0: If rank="min", all nodes are placed on the minimum rank. wolffd@0: If rank="source", all nodes are placed on the minimum rank, and wolffd@0: the only nodes on the minimum rank belong to some subgraph whose wolffd@0: rank attribute is "source" or "min". wolffd@0: Analogous criteria hold for rank="max" and rank="sink". wolffd@0: (Note: the wolffd@0: minimum rank is topmost or leftmost, and the maximum rank is bottommost wolffd@0: or rightmost.) wolffd@0: wolffd@0:
rankdir wolffd@0:
Sets direction of graph layout. For example, if rankdir="LR", wolffd@0: and barring cycles, an edge T -> H; will go wolffd@0: from left to right. By default, graphs are laid out from top to bottom. wolffd@0:

wolffd@0: This attribute also has a side-effect in determining how record nodes wolffd@0: are interpreted. See record shapes. wolffd@0: wolffd@0:

ranksep wolffd@0:
In dot, this gives the desired rank separation, in inches. This is wolffd@0: the minimum vertical distance between the bottom of the nodes in one wolffd@0: rank and the tops of nodes in the next. If the value wolffd@0: contains "equally", the centers of all ranks are spaced equally apart. wolffd@0: Note that both wolffd@0: settings are possible, e.g., ranksep = "1.2 equally". wolffd@0: In twopi, specifies radial separation of concentric circles. wolffd@0: wolffd@0:
ratio wolffd@0:
Sets the aspect ratio (drawing height/drawing width) for the drawing. wolffd@0: Note that this is adjusted before wolffd@0: the size attribute constraints are enforced. wolffd@0:

wolffd@0: If ratio is numeric, it is taken as the desired aspect ratio. wolffd@0: Then, if the actual aspect ratio is less than the desired ratio, wolffd@0: the drawing height is scaled up to achieve the wolffd@0: desired ratio; if the actual ratio is greater than that desired ratio, wolffd@0: the drawing width is scaled up. wolffd@0:

wolffd@0: If ratio = "fill" and the size wolffd@0: attribute is set, node positions are scaled, separately in both x wolffd@0: and y, so that the final drawing exactly fills the specified size. wolffd@0:

wolffd@0: If ratio = "compress" and the size wolffd@0: attribute is set, dot attempts to compress the initial layout to fit wolffd@0: in the given size. This achieves a tighter packing of nodes but wolffd@0: reduces the balance and symmetry. This feature only works in dot. wolffd@0:

wolffd@0: If ratio = "expand", the size wolffd@0: attribute is set, and both the width and the height of the graph are wolffd@0: less than the value in size, node positions are scaled wolffd@0: uniformly until at least wolffd@0: one dimension fits size exactly. wolffd@0: Note that this is distinct from using size as the wolffd@0: desired size, as here the drawing is expanded before edges are generated and wolffd@0: all node and text sizes remain unchanged. wolffd@0:

wolffd@0: If ratio = "auto", the page wolffd@0: attribute is set and the graph cannot be drawn on a single page, wolffd@0: then size is set to an ``ideal'' value. wolffd@0: In particular, the size in a given dimension will be the smallest integral wolffd@0: multiple of the page size in that dimension which is at least half the wolffd@0: current size. The two dimensions are then scaled independently to the wolffd@0: new size. This feature only works in dot. wolffd@0: wolffd@0:

rects wolffd@0:
Rectangles for fields of records, in points. wolffd@0: wolffd@0:
regular wolffd@0:
If true, force polygon to be regular. wolffd@0: wolffd@0:
remincross wolffd@0:
If true and there are multiple clusters, run cross wolffd@0: minimization a second time. wolffd@0: wolffd@0:
repulsiveforce wolffd@0:
The power of the repulsive force used in an extended Fruchterman-Reingold wolffd@0: force directed model. Values larger than 1 tend to reduce wolffd@0: the warping effect at the expense of less clustering. wolffd@0: wolffd@0:
resolution wolffd@0:
This is a synonym for the dpi attribute. wolffd@0: wolffd@0:
root wolffd@0:
This specifies nodes to be used as the center of the wolffd@0: layout and the root of the generated spanning tree. As a graph attribute, wolffd@0: this gives the name of the node. As a node attribute (circo only), it wolffd@0: specifies that the node should be used as a central node. In twopi, wolffd@0: this will actually be the central node. In circo, the block containing wolffd@0: the node will be central in the drawing of its connected component. wolffd@0: If not defined, wolffd@0: twopi will pick a most central node, and circo will pick a random node. wolffd@0: wolffd@0:
rotate wolffd@0:
If 90, set drawing orientation to landscape. wolffd@0: wolffd@0:
samehead wolffd@0:
Edges with the same head and the same samehead value are aimed wolffd@0: at the same point on the head. wolffd@0: See limitation. wolffd@0: wolffd@0:
sametail wolffd@0:
Edges with the same tail and the same sametail value are aimed wolffd@0: at the same point on the tail. wolffd@0: See limitation. wolffd@0: wolffd@0:
samplepoints wolffd@0:
If the input graph defines the vertices wolffd@0: attribute, and output is dot or xdot, this gives wolffd@0: the number of points used for a node whose shape is a circle or ellipse. wolffd@0: It plays the same role in neato, when adjusting the layout to avoid wolffd@0: overlapping nodes, and in image maps. wolffd@0: wolffd@0:
searchsize wolffd@0:
During network simplex, maximum number of edges with negative cut values wolffd@0: to search when looking for one with minimum cut value. wolffd@0: wolffd@0:
sep wolffd@0:
Specifies margin to leave around nodes when removing node overlap. wolffd@0: This guarantees a minimal non-zero distance between nodes. wolffd@0:

wolffd@0: If the attribute begins with a plus sign '+', an additive margin is wolffd@0: specified. That is, "+w,h" causes the node's bounding box to be increased wolffd@0: by w wolffd@0: points on the left and right sides, and by h points on the top and bottom. wolffd@0: Without a plus sign, the node is scaled by 1 + w in the x coordinate wolffd@0: and 1 + h in the y coordinate. wolffd@0:

wolffd@0: If only a single number is given, this is used for both dimensions. wolffd@0:

wolffd@0: If unset but esep is defined, the sep values wolffd@0: will be set to the esep values divided by 0.8. wolffd@0: If esep is unset, the default value is used. wolffd@0: wolffd@0:

shape wolffd@0:
Set the shape of a node. wolffd@0: wolffd@0:
shapefile wolffd@0:
(Deprecated) If defined, shapefile specifies a file containing user-supplied node content. wolffd@0: The shape of the node is set to box. wolffd@0: The image in the shapefile must be wolffd@0: rectangular. The image formats supported as well as the precise semantics of wolffd@0: how the file is used depends on the wolffd@0: output format. For further details, see wolffd@0: Image Formats and wolffd@0: External PostScript files. wolffd@0:

wolffd@0: There is one exception to this usage. wolffd@0: If shape is set to "epsf", shapefile gives wolffd@0: a filename containing a definition of the node in PostScript. wolffd@0: The graphics defined must be contain all of the wolffd@0: node content, including any desired boundaries. wolffd@0: For further details, see wolffd@0: wolffd@0: External PostScript files. wolffd@0: wolffd@0:

showboxes wolffd@0:
Print guide boxes in PostScript at the beginning of wolffd@0: routesplines if 1, or at the end if 2. (Debugging) wolffd@0: wolffd@0:
sides wolffd@0:
Number of sides if shape=polygon. wolffd@0: wolffd@0:
size wolffd@0:
Maximum width and height of drawing, in inches. wolffd@0: If defined and the drawing is too large, the drawing is uniformly wolffd@0: scaled down so that it fits within the given size. wolffd@0:

wolffd@0: If size ends in an exclamation point (!), wolffd@0: then it is taken to be wolffd@0: the desired size. In this case, if both dimensions of the drawing are wolffd@0: less than size, the drawing is scaled up uniformly until at wolffd@0: least one dimension equals its dimension in size. wolffd@0:

wolffd@0: Note that there is some interaction between the size and wolffd@0: ratio attributes. wolffd@0: wolffd@0:

skew wolffd@0:
Skew factor for shape=polygon. Positive values wolffd@0: skew top of polygon to right; negative to left. wolffd@0: wolffd@0:
smoothing wolffd@0:
Specifies a post-processing step used to smooth out an uneven distribution wolffd@0: of nodes. wolffd@0: wolffd@0:
sortv wolffd@0:
If packmode indicates an array packing, wolffd@0: this attribute specifies an wolffd@0: insertion order among the components, with smaller values inserted first. wolffd@0: wolffd@0:
splines wolffd@0:
Controls how, and if, edges are represented. If true, edges are drawn as wolffd@0: splines routed around nodes; if false, edges are drawn as line segments. wolffd@0: If set to "", no edges are drawn at all. wolffd@0:

wolffd@0: (1 March 2007) The values line and spline can be wolffd@0: used as synonyms for false and true, respectively. wolffd@0: In addition, the value polyline specifies that edges should be wolffd@0: drawn as polylines. wolffd@0:

wolffd@0: By default, the attribute is unset. How this is interpreted depends on wolffd@0: the layout. For dot, the default is to draw edges as splines. For all wolffd@0: other layouts, the default is to draw edges as line segments. Note that wolffd@0: for these latter layouts, if splines="true", this wolffd@0: requires non-overlapping nodes (cf. overlap). wolffd@0: If fdp is used for layout and splines="compound", then the edges are wolffd@0: drawn to avoid clusters as well as nodes. wolffd@0: wolffd@0:

start wolffd@0:
Parameter used to determine the initial layout of nodes. If unset, the wolffd@0: nodes are randomly placed in a unit square with wolffd@0: the same seed is always used for the random number generator, so the wolffd@0: initial placement is repeatable. wolffd@0: wolffd@0:
style wolffd@0:
Set style for node or edge. For cluster subgraph, if "filled", the wolffd@0: cluster box's background is filled. wolffd@0: wolffd@0:
stylesheet wolffd@0:
A URL or pathname specifying an XML style sheet, used in SVG output. wolffd@0: wolffd@0:
tailURL wolffd@0:
If tailURL is defined, it is wolffd@0: output as part of the tail label of the edge. wolffd@0: Also, this value is used near the tail node, overriding any wolffd@0: URL value. wolffd@0: See limitation. wolffd@0: wolffd@0:
tailclip wolffd@0:
If true, the tail of an edge is clipped to the boundary of the tail node; wolffd@0: otherwise, the end of the edge goes to the center of the node, or the wolffd@0: center of a port, if applicable. wolffd@0: wolffd@0:
tailhref wolffd@0:
Synonym for tailURL. wolffd@0: wolffd@0:
taillabel wolffd@0:
Text label to be placed near tail of edge. wolffd@0: See limitation. wolffd@0: wolffd@0:
tailport wolffd@0:
Indicates where on the tail node to attach the tail of the edge. wolffd@0: See limitation. wolffd@0: wolffd@0:
tailtarget wolffd@0:
If the edge has a tailURL, wolffd@0: this attribute determines which window of the wolffd@0: browser is used wolffd@0: for the URL. Setting it to "_graphviz" will open a new window if it wolffd@0: doesn't already exist, or reuse it if it does. wolffd@0: If undefined, the value of the target is used. wolffd@0: wolffd@0:
tailtooltip wolffd@0:
Tooltip annotation attached to the tail of an edge. This is used only wolffd@0: if the edge has a tailURL attribute. wolffd@0: wolffd@0:
target wolffd@0:
If the object has a URL, this attribute determines which window wolffd@0: of the browser is used for the URL. wolffd@0: See W3C documentation. wolffd@0: wolffd@0:
tooltip wolffd@0:
Tooltip annotation attached to the node or edge. If unset, Graphviz wolffd@0: will use the object's label if defined. wolffd@0: Note that if the label is a record specification or an HTML-like wolffd@0: label, the resulting tooltip may be unhelpful. In this case, if wolffd@0: tooltips will be generated, the user should set a tooltip wolffd@0: attribute explicitly. wolffd@0: wolffd@0:
truecolor wolffd@0:
If set explicitly to true or false, the value determines whether or not wolffd@0: internal bitmap rendering relies on a truecolor color model or uses wolffd@0: a color palette. wolffd@0: If the attribute is unset, truecolor is not used wolffd@0: unless there is a shapefile property wolffd@0: for some node in the graph. wolffd@0: The output model will use the input model when possible. wolffd@0:

wolffd@0: Use of color palettes results in less memory usage during creation of the wolffd@0: bitmaps and smaller output files. wolffd@0:

wolffd@0: Usually, the only time it is necessary to specify the truetype model wolffd@0: is if the graph uses more than 256 colors. wolffd@0: However, if one uses bgcolor=transparent with wolffd@0: a color palette, font wolffd@0: antialiasing can show up as a fuzzy white area around characters. wolffd@0: Using truecolor=true avoids this problem. wolffd@0: wolffd@0:

vertices wolffd@0:
If the input graph defines this attribute, the node is polygonal, wolffd@0: and output is dot or xdot, this attribute provides the wolffd@0: coordinates of the vertices of the node's polygon, in inches. wolffd@0: If the node is an ellipse or circle, the wolffd@0: samplepoints attribute affects wolffd@0: the output. wolffd@0: wolffd@0:
viewport wolffd@0:
Clipping window on final drawing. wolffd@0: wolffd@0:
voro_margin wolffd@0:
Factor to scale up drawing to allow margin for expansion in wolffd@0: Voronoi technique. dim' = (1+2*margin)*dim. wolffd@0: wolffd@0:
weight wolffd@0:
Weight of edge. In dot, the heavier the weight, the shorter, wolffd@0: straighter and more vertical the edge is. wolffd@0: wolffd@0:
width wolffd@0:
Width of node, in inches. This is taken as the initial, minimum width wolffd@0: of the node. If fixedsize is true, this wolffd@0: will be the final width of the node. Otherwise, if the node label wolffd@0: requires more width to fit, the node's width will be increased to wolffd@0: contain the label. Note also that, if the output format is dot, the wolffd@0: value given to width will be the final value. wolffd@0: wolffd@0:
z wolffd@0:
Deprecated:Use pos attribute, along wolffd@0: with dimen and/or dim wolffd@0: to specify dimensions. wolffd@0:

wolffd@0: Provides z coordinate value for 3D layouts and displays. If the wolffd@0: graph has dim set to 3 (or more), wolffd@0: neato will use a node's z value wolffd@0: for the z coordinate of its initial position if wolffd@0: its pos attribute is also defined. wolffd@0:

wolffd@0: Even if no z values are specified in the input, it is necessary to wolffd@0: declare a z attribute for nodes, e.g, using node[z=""] wolffd@0: in order to get z values on output. wolffd@0: Thus, setting dim=3 but not declaring z will wolffd@0: cause neato -Tvrml to wolffd@0: layout the graph in 3D but project the layout onto the xy-plane wolffd@0: for the rendering. If the z attribute is declared, the final rendering wolffd@0: will be in 3D. wolffd@0: wolffd@0:

wolffd@0:
wolffd@0:

Attribute Type Descriptions

wolffd@0: The following list gives the legal strings corresponding to values of wolffd@0: the given types. wolffd@0:
wolffd@0:
arrowType wolffd@0:
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
"normal" wolffd@0: "inv"
"dot" wolffd@0: "invdot"
"odot" wolffd@0: "invodot"
"none" wolffd@0: "tee"
"empty" wolffd@0: "invempty"
"diamond" wolffd@0: "odiamond"
"ediamond" wolffd@0: "crow"
"box" wolffd@0: "obox"
"open" wolffd@0: "halfopen"
"vee" wolffd@0:
wolffd@0:

wolffd@0: These are the basic set of backward-compatible arrow shapes. In addition, wolffd@0: there is a grammar of arrow shapes wolffd@0: which can be used to describe a collection of 1,544,761 arrow combinations of the 36 varations of the primitive set of 9 arrows. The basic arrows shown wolffd@0: above contain all of the primitive shapes wolffd@0: (box, crow, diamond, wolffd@0: dot, inv, none, wolffd@0: normal, tee, vee) wolffd@0: plus ones that can be derived from the grammar wolffd@0: (odot, invdot, invodot, wolffd@0: obox, odiamond) wolffd@0: plus some supported as special cases for backward-compatibility wolffd@0: (ediamond, open, halfopen, wolffd@0: empty, invempty). wolffd@0: wolffd@0:

aspectType wolffd@0:

An aspect ratio, double, followed optionally by a ',' and a maximum pass wolffd@0: count. If the aspect ratio is given, but no maximum pass count, the wolffd@0: latter defaults to 5. wolffd@0: wolffd@0:

clusterMode wolffd@0:
"local","global","none" wolffd@0: wolffd@0:
color wolffd@0:
Colors can be specified using one of four formats. wolffd@0: wolffd@0: wolffd@0: wolffd@0:
"#%2x%2x%2x"Red-Green-Blue (RGB)
"#%2x%2x%2x%2x"Red-Green-Blue-Alpha (RGBA)
H[, ]+S[, ]+VHue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0
stringcolor name
wolffd@0: The specification for the RGB and RGBA formats are the format strings used by wolffd@0: sscanf to scan the color value. Thus, these values have the form wolffd@0: "#RGB" or "#RGBA", where R, G, B, and A each consist of 2 hexidecimal wolffd@0: digits, and can be separated by whitespace. HSV colors have the form of 3 wolffd@0: numbers between 0 and 1, separated by whitespace or commas. wolffd@0:

wolffd@0: String-valued color specifications are case-insensitive and interpreted wolffd@0: in the context of the current color scheme, as specified by the wolffd@0: colorscheme attribute. If this is undefined, wolffd@0: the X11 naming scheme will be used. wolffd@0: An initial "/" character can be used to override the use of wolffd@0: the colorscheme attribute. In particular, a single initial wolffd@0: "/" will cause the string to be evaluated using the default wolffd@0: X11 naming. If the color value has the form "/ssss/yyyy", wolffd@0: the name yyyy is interpreted using the schema ssss. wolffd@0: If the color scheme name is empty, i.e., the color has the wolffd@0: form "//yyyy", the colorscheme attribute is used. wolffd@0: Thus, the forms "yyyy" and "//yyyy" are wolffd@0: equivalent. wolffd@0:

At present, Graphviz recognizes the default color scheme X11, wolffd@0: and the Brewer color schemes. Please note that Brewer wolffd@0: color schemes are covered by this license. wolffd@0:

wolffd@0: Examples:
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
ColorRGBHSVString
White"#ffffff""0.000 0.000 1.000""white"
Black"#000000""0.000 0.000 0.000""black"
Red"#ff0000""0.000 1.000 1.000""red"
Turquoise"#40e0d0""0.482 0.714 0.878""turquoise"
Sienna"#a0522d""0.051 0.718 0.627""sienna"
wolffd@0:

wolffd@0: Note that some output formats, e.g., mif, wolffd@0: only support a limited number of specific colors. wolffd@0:

wolffd@0: The string value transparent can be used to indicate no color. wolffd@0: This is only available in the output formats wolffd@0: ps, svg, fig, vmrl, and the bitmap formats. It can be used whenever a wolffd@0: color is needed but is most useful with wolffd@0: the bgcolor attribute. wolffd@0: Usually, the same effect can be achieved by setting wolffd@0: style to invis. wolffd@0: wolffd@0:

colorList wolffd@0:
A colon-separated list of color values: C(:C)* wolffd@0: where each C is a color value. wolffd@0: wolffd@0:
dirType wolffd@0:
For an edge T -> H; wolffd@0: wolffd@0: wolffd@0: wolffd@0:
"forward" wolffd@0: "back"
"both" wolffd@0: "none"
wolffd@0: For undirected edges T -- H;, one of the nodes, usually wolffd@0: the righthand one, is treated as the head for the purpose of wolffd@0: interpreting "forward" and "back". wolffd@0: wolffd@0:
escString wolffd@0:
string allowing escape sequences which are replaced according wolffd@0: to the context. wolffd@0: For node attributes, the substring "\N" is replaced by the name of the node, wolffd@0: and the substring "\G" by the name of the graph. wolffd@0: For graph or cluster attributes, the substring "\G" is replaced by the wolffd@0: name of the graph or cluster. wolffd@0: For edge attributes, the substring "\E" is replaced by the name of the edge, wolffd@0: the substring "\G" is replaced by the name of the graph or cluster, wolffd@0: and the substrings "\T" and "\H" by the names of wolffd@0: the tail and head nodes, respectively. wolffd@0: The name of an edge is the string formed from the name of the wolffd@0: tail node, the appropriate edge operator ("--" or "->") and the name of the wolffd@0: head node. wolffd@0: In all cases, the substring "\L" is replaced by the object's label attribute. wolffd@0:

wolffd@0: In addition, if the associated attribute is wolffd@0: label, wolffd@0: headlabel or taillabel, wolffd@0: the escape sequences "\n", "\l" and "\r" wolffd@0: divide the label into lines, centered, left-justified, and right-justified, wolffd@0: respectively. wolffd@0: wolffd@0:

layerList wolffd@0:
list of strings separated by characters from the wolffd@0: layersep attribute (by default, colons, wolffd@0: tabs or spaces), defining layer wolffd@0: names and implicitly numbered 1,2,... wolffd@0: wolffd@0:
layerRange wolffd@0:
layerId or layerIdslayerId,
where layerId = "all", wolffd@0: a decimal integer or a layer name. wolffd@0: (An integer i corresponds to layer i.) wolffd@0: The string s consists of 1 or more separator characters specified wolffd@0: by the layersep attribute. wolffd@0: wolffd@0:
lblString wolffd@0:
an escString wolffd@0: or an HTML label. wolffd@0: wolffd@0:
outputMode wolffd@0:
"breadthfirst","nodesfirst","edgesfirst" wolffd@0: These specify the order in which nodes and edges are drawn in concrete wolffd@0: output. The default "breadthfirst" is the simplest, but when the graph wolffd@0: layout does not avoid edge-node overlap, this mode will sometimes have wolffd@0: edges drawn over nodes and sometimes on top of nodes. If the mode wolffd@0: "nodesfirst" is chosen, all nodes are drawn first, followed by the wolffd@0: edges. This guarantees an edge-node overlap will not be mistaken for wolffd@0: an edge ending at a node. On the other hand, usually for aesthetic wolffd@0: reasons, it may be desirable that all edges appear beneath nodes, even wolffd@0: if the resulting drawing is ambiguous. This can be achieved by choosing wolffd@0: "edgesfirst". wolffd@0: wolffd@0:
packMode wolffd@0:
"node", "clust" , "graph" , "array[_flags][%d]" wolffd@0:

wolffd@0: The modes "node", "clust" or "graph" wolffd@0: specify that the components should be packed together tightly, using wolffd@0: the specified granularity. wolffd@0: A value of "node" causes wolffd@0: packing at the node and edge level, with no overlapping of these objects. wolffd@0: This produces a layout with the least area, but it also allows interleaving, wolffd@0: where a node of one component may lie between two nodes in another wolffd@0: component. A value of "graph" does a packing using the bounding box of the wolffd@0: component. Thus, there will be a rectangular region around a component wolffd@0: free of elements of any other component. wolffd@0: A value of "clust" guarantees that top-level clusters are kept intact. wolffd@0: What effect a value has also depends on the layout algorithm. For wolffd@0: example, neato does not support clusters, so a value of "clust" will wolffd@0: have the same effect as the default "node" value. wolffd@0:

wolffd@0: The mode "array[_flags][%d]" wolffd@0: indicates that the components should be packed at the wolffd@0: graph level into an array of graphs. By default, the components wolffd@0: are in row-major order, with the number of columns roughly the wolffd@0: square root of the number of components. If the optional flags wolffd@0: contains "c", then column-major order is used. Finally, if the wolffd@0: optional integer suffix is used, this specifies the number of wolffd@0: columns for row-major or the number of rows for column-major. wolffd@0: Thus, the mode "array_c4" indicates array packing, with 4 rows, wolffd@0: starting in the upper left and going down the first column, then wolffd@0: down the second column, etc., until all components are used. wolffd@0:

wolffd@0: If the optional flags contains "u", this causes the insertion wolffd@0: order of elements in the array to be determined by user-supplied wolffd@0: values. Each component can specify its sort value by a wolffd@0: non-negative integer using the sortv attribute. wolffd@0: Components are wolffd@0: inserted in order, starting with the one with the smallest wolffd@0: sort value. If no sort value is specified, zero is used. wolffd@0: wolffd@0:

pagedir wolffd@0:
"BL", "BR", "TL", "TR", "RB", "RT", "LB", "LT". wolffd@0: These specify the 8 row or column major orders for traversing a wolffd@0: rectangular array, the first character corresponding to the major wolffd@0: order and the second to the minor order. Thus, for "BL", the wolffd@0: major order is from bottom to top, and the minor order is from left wolffd@0: to right. This means the bottom row is traversed first, from left wolffd@0: to right, then the next row up, from left to right, and so on, wolffd@0: until the topmost row is traversed. wolffd@0: wolffd@0:
point wolffd@0:
"%f,%f"('!') representing the point (x,y). The wolffd@0: optional '!' indicates the wolffd@0: node position should not change (input-only). wolffd@0:

wolffd@0: If dim is 3 or more, point may also have wolffd@0: the format "%f,%f,%f"('!') to represent the point (x,y,z). wolffd@0: wolffd@0:

pointf wolffd@0:
"%lf,%lf" representing the point (x,y). wolffd@0: wolffd@0:
pointfList wolffd@0:
list of pointf, separated by spaces. wolffd@0: wolffd@0:
portPos wolffd@0:
modifier indicating where on a node an edge should be aimed. wolffd@0: It has the form portname[:compass_point] wolffd@0: or compass_point. wolffd@0: If the first form is used, the corresponding node must either have wolffd@0: record shape with one of its fields wolffd@0: having the given portname, wolffd@0: or have an HTML-like label, one of wolffd@0: whose components has a PORT attribute set to portname. wolffd@0:

wolffd@0: If a compass point is used, it must have the form wolffd@0: "n","ne","e","se","s","sw","w","nw","c","_". This modifies the edge wolffd@0: placement to aim for the corresponding compass point on the port or, wolffd@0: in the second form where no portname is supplied, on the node wolffd@0: itself. The compass point "c" specifies the center of the node or port. wolffd@0: The compass point "_" specifies that an appropriate side of the port wolffd@0: adjacent to the exterior of the node should be used, if such exists. wolffd@0: Otherwise, the center is used. wolffd@0: If no compass point is used with a portname, the default value is "_". wolffd@0:

wolffd@0:

wolffd@0: This attribute can be attached to an edge using the wolffd@0: headport and wolffd@0: tailport attributes, or as part of the wolffd@0: edge description as in wolffd@0:

wolffd@0: node1:port1 -> node2:port5:nw; wolffd@0:
wolffd@0:

wolffd@0: Note that it is legal to have a portname the same as one of wolffd@0: the compass points. In this case, this reference will be resolved to wolffd@0: the port. Thus, if node A has a port w, then wolffd@0: headport=w will refer to the port and not the compass point. wolffd@0: At present, in this case, there is no way to specify that the compass wolffd@0: point should be used. wolffd@0: wolffd@0:

quadType wolffd@0:
"normal", "fast", "none". wolffd@0:

wolffd@0: Using "fast" gives about a 2-4 times overall speedup compared with "normal", wolffd@0: though layout quality can suffer a little. wolffd@0: wolffd@0:

rankType wolffd@0:
"same", "min", "source", "max", "sink" wolffd@0: wolffd@0:
rankdir wolffd@0:
"TB", "LR", "BT", "RL", corresponding to directed graphs drawn wolffd@0: from top to bottom, from left to right, from bottom to top, and from wolffd@0: right to left, respectively. wolffd@0: wolffd@0:
rect wolffd@0:
"%f,%f,%f,%f" The rectangle llx,lly,urx,ury gives the coordinates, in wolffd@0: points, of the lower-left corner (llx,lly) and the upper-right corner wolffd@0: (urx,ury). wolffd@0: wolffd@0:
shape wolffd@0:
A string specifying the shape of a node. wolffd@0: There are three wolffd@0: main types of shapes : wolffd@0: polygon-based, wolffd@0: record-based and wolffd@0: user-defined. wolffd@0: wolffd@0:
smoothType wolffd@0:
Values are "none", "avg_dist", "graph_dist", "power_dist", "rng", wolffd@0: "spring" and "triangle". wolffd@0: wolffd@0:
splineType wolffd@0:
spline ( ';' spline )*
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
where spline=(endp)? (startp)? point (triple)+
and triple=point point point
and endp="e,%f,%f"
and startp="s,%f,%f"
wolffd@0: If a spline has points p1 p2 p3 ... pn, (n = 1 (mod 3)), the points wolffd@0: correspond to the control points of a B-spline from p1 to pn. If startp wolffd@0: is given, it touches one node of the edge, and the arrowhead wolffd@0: goes from p1 to startp. If startp is not given, p1 touches a node. wolffd@0: Similarly for pn and endp. wolffd@0: wolffd@0:
startType wolffd@0:
has the syntax [style][seed]. wolffd@0:

wolffd@0: If style is present, it must be one of the strings "regular", wolffd@0: "self", or "random". In the first case, the nodes are wolffd@0: placed regularly about a circle. In the second case, wolffd@0: an abbreviated version of neato is run to obtain the initial layout. wolffd@0: In the last case, the nodes are placed randomly in a unit square. wolffd@0:

wolffd@0: If seed is present, it specifies a seed for the random number wolffd@0: generator. If seed is a positive number, this is used as the wolffd@0: seed. If it is anything else, wolffd@0: the current time, and possibly the process id, is used to pick a seed, wolffd@0: thereby making the choice more random. In this case, the seed value wolffd@0: is stored in the graph. wolffd@0:

wolffd@0: If the value is just "random", a time-based seed is chosen. wolffd@0:

wolffd@0: Note that input positions, specified by a node's wolffd@0: pos wolffd@0: attribute, are only used when the style is "random". wolffd@0: wolffd@0:

style wolffd@0:
styleItem ( ',' styleItem )*
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
where styleItem=name or name'('args')'
and args=name ( ',' name )*
and name=[^)(,  ][^)(,]*
wolffd@0: Note that whitespace characters are ignored, except for names which wolffd@0: can contain them. A wolffd@0: name cannot contain any comma, or left or right parenthesis, and it cannot wolffd@0: begin with a whitespace character. wolffd@0:

wolffd@0: At present, the recognized style names are wolffd@0: "dashed", "dotted", "solid", "invis" and "bold" for nodes and edges, wolffd@0: and "filled", "diagonals" and "rounded" for nodes only. wolffd@0: The styles "filled" and "rounded" are recognized for clusters. wolffd@0: Additional styles are available in wolffd@0: device-dependent form. Style lists are passed to device drivers, which wolffd@0: can use this to generate appropriate output. wolffd@0:

wolffd@0: The setlinewidth style value can be wolffd@0: used for more control over the width of node borders and edges than is wolffd@0: allowed by bold. This style value takes an argument, specifying the wolffd@0: width of the line in points. For example, style="bold" is wolffd@0: equivalent to style="setlinewidth(2)". wolffd@0: The use of setlinewidth is deprecated; one should use the wolffd@0: penwidth attribute instead. wolffd@0: wolffd@0:

viewPort wolffd@0:
"%lf,%lf,%lf,%lf,%lf" or "%lf,%lf,%lf,'%s'" wolffd@0:

wolffd@0: The viewPort W,H,Z,x,y or W,H,Z,N wolffd@0: specifies a viewport for the final image. The pair (W,H) gives the wolffd@0: dimensions (width and height) of the final image, in wolffd@0: points. wolffd@0: The optional Z is the zoom factor, i.e., the image in the original layout will be wolffd@0: W/Z by H/Z points in size. By default, Z is 1. wolffd@0: The optional last part is either a pair (x,y) giving a position in the original layout of the wolffd@0: graph, in wolffd@0: points, of the center of the viewport, or the name N wolffd@0: of a node whose center should used as the focus. wolffd@0: By default, the focus is the center of the graph bounding box, i.e., wolffd@0: (bbx/2,bby/2), where "bbx,bby" is the wolffd@0: value of the bounding box attribute bb. wolffd@0:

wolffd@0: Sample values: 50,50,.5,'2.8 BSD' or 100,100,2,450,300. wolffd@0: The first will take the 100x100 point square centered on the node 2.8 BSD wolffd@0: and scale it down by 0.5, yielding a 50x50 point final image. wolffd@0: wolffd@0:

wolffd@0: wolffd@0: