All Graphviz attributes are specified by name-value pairs. Thus, to set the fillcolor of a node abc, one would use
abc [fillcolor = red] |
abc -> def [arrowhead = diamond] |
At present, most device-independent units are either inches or points, which we take as 72 points per inch.
Note: Some attributes, such as dir or arrowtail, are ambiguous when used in DOT with an undirected graph since the head and tail of an edge are meaningless. As a convention, the first time an undirected edge appears, the DOT parser will assign the left node as the tail node and the right node as the head. For example, the edge A -- B will have tail A and head B. It is the user's responsibility to handle such edges consistently. If the edge appears later, in the format
B -- A [taillabel = "tail"] |
The tools accept standard C representations for int and double types. For the bool type, TRUE values are represented by "true" or "yes" (case-insensitive) and any non-zero integer, and FALSE values by "false" or "no" (case-insensitive) and zero. In addition, there are a variety of specialized types such as arrowType, color, pointf and rankdir. Legal values for these types are given at the end.
In the Used By field, the characters E, N, G, S and C represent edges, nodes, the root graph, subgraphs and cluster subgraphs, respectively. This field indicates which graph component uses the attribute.
Name | Used By | Type | Default | Minimum | Notes |
---|---|---|---|---|---|
Damping | G | double | 0.99 | 0.0 | neato only |
K | GC | double | 0.3 | 0 | sfdp, fdp only |
URL | ENGC | escString | <none> | svg, postscript, map only | |
arrowhead | E | arrowType | normal | ||
arrowsize | E | double | 1.0 | 0.0 | |
arrowtail | E | arrowType | normal | ||
aspect | G | aspectType | dot only | ||
bb | G | rect | write only | ||
bgcolor | GC | color | <none> | ||
center | G | bool | false | ||
charset | G | string | "UTF-8" | ||
clusterrank | G | clusterMode | local | dot only | |
color | ENC | color
colorList | black | ||
colorscheme | ENCG | string | "" | ||
comment | ENG | string | "" | ||
compound | G | bool | false | dot only | |
concentrate | G | bool | false | ||
constraint | E | bool | true | dot only | |
decorate | E | bool | false | ||
defaultdist | G | double | 1+(avg. len)*sqrt(|V|) | epsilon | neato only |
dim | G | int | 2 | 2 | sfdp, fdp, neato only |
dimen | G | int | 2 | 2 | sfdp, fdp, neato only |
dir | E | dirType | forward(directed) none(undirected) | ||
diredgeconstraints | G | string bool | false | neato only | |
distortion | N | double | 0.0 | -100.0 | |
dpi | G | double | 96.0 0.0 | svg, bitmap output only | |
edgeURL | E | escString | "" | svg, map only | |
edgehref | E | escString | "" | svg, map only | |
edgetarget | E | escString | <none> | svg, map only | |
edgetooltip | E | escString | "" | svg, cmap only | |
epsilon | G | double | .0001 * # nodes(mode == KK) .0001(mode == major) | neato only | |
esep | G | double pointf | +3 | not dot | |
fillcolor | NC | color | lightgrey(nodes) black(clusters) | ||
fixedsize | N | bool | false | ||
fontcolor | ENGC | color | black | ||
fontname | ENGC | string | "Times-Roman" | ||
fontnames | G | string | "" | svg only | |
fontpath | G | string | system-dependent | ||
fontsize | ENGC | double | 14.0 | 1.0 | |
group | N | string | "" | dot only | |
headURL | E | escString | "" | svg, map only | |
headclip | E | bool | true | ||
headhref | E | escString | "" | svg, map only | |
headlabel | E | lblString | "" | ||
headport | E | portPos | center | ||
headtarget | E | escString | <none> | svg, map only | |
headtooltip | E | escString | "" | svg, cmap only | |
height | N | double | 0.5 | 0.02 | |
href | E | escString | "" | svg, postscript, map only | |
id | GNE | lblString | "" | svg, postscript, map only | |
image | N | string | "" | ||
imagescale | N | bool
string | false | ||
label | ENGC | lblString | "\N" (nodes) "" (otherwise) | ||
labelURL | E | escString | "" | svg, map only | |
labelangle | E | double | -25.0 | -180.0 | |
labeldistance | E | double | 1.0 | 0.0 | |
labelfloat | E | bool | false | ||
labelfontcolor | E | color | black | ||
labelfontname | E | string | "Times-Roman" | ||
labelfontsize | E | double | 14.0 | 1.0 | |
labelhref | E | escString | "" | svg, map only | |
labeljust | GC | string | "c" | ||
labelloc | NGC | string | "t"(clusters) "b"(root graphs) "c"(nodes) | ||
labeltarget | E | escString | <none> | svg, map only | |
labeltooltip | E | escString | "" | svg, cmap only | |
landscape | G | bool | false | ||
layer | EN | layerRange | "" | ||
layers | G | layerList | "" | ||
layersep | G | string | " :\t" | ||
layout | G | string | "" | ||
len | E | double | 1.0(neato) 0.3(fdp) | fdp, neato only | |
levels | G | int | MAXINT | 0.0 | sfdp only |
levelsgap | G | double | 0.0 | neato only | |
lhead | E | string | "" | dot only | |
lp | EGC | point | write only | ||
ltail | E | string | "" | dot only | |
margin | NG | double pointf | <device-dependent> | ||
maxiter | G | int | 100 * # nodes(mode == KK) 200(mode == major) 600(fdp) | fdp, neato only | |
mclimit | G | double | 1.0 | dot only | |
mindist | G | double | 1.0 | 0.0 | circo only |
minlen | E | int | 1 | 0 | dot only |
mode | G | string | "major" | neato only | |
model | G | string | "shortpath" | neato only | |
mosek | G | bool | false | neato only | |
nodesep | G | double | 0.25 | 0.02 | dot only |
nojustify | GCNE | bool | false | ||
normalize | G | bool | false | not dot | |
nslimit
nslimit1 | G | double | dot only | ||
ordering | G | string | "" | dot only | |
orientation | N | double | 0.0 | 360.0 | |
orientation | G | string | "" | ||
outputorder | G | outputMode | breadthfirst | ||
overlap | G | string bool | true | not dot | |
overlap_scaling | G | double | -4 | -1.0e10 | prism only |
pack | G | bool
int | false | not dot | |
packmode | G | packMode | node | not dot | |
pad | G | double pointf | 0.0555 (4 points) | ||
page | G | double pointf | |||
pagedir | G | pagedir | BL | ||
pencolor | C | color | black | ||
penwidth | CNE | double | 1.0 | 0.0 | |
peripheries | NC | int | shape default(nodes) 1(clusters) | 0 | |
pin | N | bool | false | fdp, neato only | |
pos | EN | point
splineType | |||
quadtree | G | quadType
bool | "normal" | sfdp only | |
quantum | G | double | 0.0 | 0.0 | |
rank | S | rankType | dot only | ||
rankdir | G | rankdir | TB | dot only | |
ranksep | G | double doubleList | 0.5(dot) 1.0(twopi) | 0.02 | twopi, dot only |
ratio | G | double string | |||
rects | N | rect | write only | ||
regular | N | bool | false | ||
remincross | G | bool | false | dot only | |
repulsiveforce | G | double | 1.0 | 0.0 | sfdp only |
resolution | G | double | 96.0 0.0 | svg, bitmap output only | |
root | GN | string bool | ""(graphs) false(nodes) | circo, twopi only | |
rotate | G | int | 0 | ||
samehead | E | string | "" | dot only | |
sametail | E | string | "" | dot only | |
samplepoints | N | int | 8(output) 20(overlap and image maps) | ||
searchsize | G | int | 30 | dot only | |
sep | G | double pointf | +4 | not dot | |
shape | N | shape | ellipse | ||
shapefile | N | string | "" | ||
showboxes | ENG | int | 0 | 0 | dot only |
sides | N | int | 4 | 0 | |
size | G | double pointf | |||
skew | N | double | 0.0 | -100.0 | |
smoothing | G | smoothType | "none" | sfdp only | |
sortv | GCN | int | 0 | 0 | |
splines | G | bool
string | |||
start | G | startType | "" | fdp, neato only | |
style | ENC | style | |||
stylesheet | G | string | "" | svg only | |
tailURL | E | escString | "" | svg, map only | |
tailclip | E | bool | true | ||
tailhref | E | escString | "" | svg, map only | |
taillabel | E | lblString | "" | ||
tailport | E | portPos | center | ||
tailtarget | E | escString | <none> | svg, map only | |
tailtooltip | E | escString | "" | svg, cmap only | |
target | ENGC | escString
string | <none> | svg, map only | |
tooltip | NEC | escString | "" | svg, cmap only | |
truecolor | G | bool | bitmap output only | ||
vertices | N | pointfList | write only | ||
viewport | G | viewPort | "" | ||
voro_margin | G | double | 0.05 | 0.0 | not dot |
weight | E | double | 1.0 | 0(dot) 1(neato,fdp,sfdp) | |
width | N | double | 0.75 | 0.01 | |
z | N | double | 0.0 | -MAXFLOAT -1000 |
For svg, cmapx and imap output, the active area for a node is its visible image. For example, an unfilled node with no drawn boundary will only be active on its label. For other output, the active area is its bounding box. The active area for a cluster is its bounding box. For edges, the active areas are small circles where the edge contacts its head and tail nodes. In addition, for svg, cmapx and imap, the active area includes a thin polygon approximating the edge. The circles may overlap the related node, and the edge URL dominates. If the edge has a label, this will also be active. Finally, if the edge has a head or tail label, this will also be active.
Note that, for edges, the attributes headURL, tailURL, labelURL and edgeURL allow control of various parts of an edge. Also note that, if active areas of two edges overlap, it is unspecified which area dominates.
By default, dot will do 5 passes attempting to achieve the desired aspect ratio. For certain graphs, more passes will be needed to get close enough. The aspect attribute can also be used to specify the maximum number of passes to try.
At present, there is no mechanism for widening a very tall layout.
Also, the algorithm doesn't handle clusters, nor disconnected graphs.
For the latter case, one can split the pipeline
ccomps -x | dot | gvpack | neato -n2
to get a similar effect.
If no background color is specified for the root graph, no graphics operation are performed on the background. This works fine for PostScript but for bitmap output, all bits are initialized to something. This means that when the bitmap output is included in some other document, all of the bits within the bitmap's bounding box will be set, overwriting whatever color or graphics where already on the page. If this effect is not desired, and you only want to set bits explicitly assigned in drawing the graph, set bgcolor="transparent".
For edges, the value can either be a single color or a colorList. In the latter case, the edge is drawn using parallel splines or lines, one for each color in the list, in the order given. The head arrow, if any, is drawn using the first color in the list, and the tail arrow, if any, the second color. This supports the common case of drawing opposing edges, but using parallel splines instead of separately routed multiedges. For example, the graph
digraph G { a -> b [dir=both color="red:blue"] }yields
digraph G { a -> c; a -> b; b -> c [constraint=false]; }the edge
b -> c
does not add a constraint during rank
assignment, so the only constraints are that a be above b and c,
yielding the graph:Note that a cluster inherits the root graph's attributes if defined. Thus, if the root graph has defined a fillcolor, this will override a color or bgcolor attribute set for the cluster.
If Graphviz was built using the fontconfig library, the latter library will be used to search for the font. However, if the fontname string contains a slash character "/", it is treated as a pathname for the font file, though font lookup will append the usual font suffixes.
If Graphviz does not use fontconfig, fontname will be considered the name of a Type 1 or True Type font file. If you specify fontname=schlbk, the tool will look for a file named schlbk.ttf or schlbk.pfa or schlbk.pfb in one of the directories specified by the fontpath attribute. The lookup does support various aliases for the common fonts.
Unlike with the shapefile attribute, the image is treated as node content rather than the entire node. In particular, an image can be contained in a node of any shape, not just a rectangle.
During rendering, in the default case (imagescale=false), the image retains its natural size. If imagescale=true, the image is uniformly scaled (i.e., its aspect ratio is preserved) to fit inside the node. At least one dimension of the image will be as large as possible given the size of the node. When imagescale=width, the width of the image is scaled to fill the node width. The corresponding property holds when imagescale=height. When imagescale=both, both the height and the width are scaled separately to fill the node.
In all cases, if a dimension of the image is larger than the corresponding dimension of the node, that dimension of the image is scaled down to fit the node. As with the case of expansion, if imagescale=true, width and height are scaled uniformly.
The angle, in degrees, specifies the rotation from the 0 degree ray, with positive angles moving counterclockwise and negative angles moving clockwise.
For graphs and clusters, only "t" and "b" are allowed, corresponding to placement at the top and bottom, respectively. By default, root graph labels go on the bottom and cluster labels go on the top. Note that a subgraph inherits attributes from its parent. Thus, if the root graph sets labelloc to "b", the subgraph inherits this value.
For nodes, this attribute is used only when the height of the node is larger than the height of its label. If labelloc is set to "t", "c", or "b", the label is aligned with the top, centered, or aligned with the bottom of the node, respectively. In the default case, the label is vertically centered.
This attribute takes precedence over the -K flag or the actual command name used.
Note that the margin is not part of the drawing but just empty space left around the drawing. It basically corresponds to a translation of drawing, as would be necessary to center a drawing on a page. Nothing is actually drawn in the margin. To actually extend the background of a drawing, see the pad attribute.
For nodes, this attribute specifies space left around the node's label. By default, the value is 0.11,0.055.
There are two new, experimental modes in neato, "hier", which adds a top-down directionality similar to the layout used in dot, and "ipsep", which allows the graph to specify minimum vertical and horizontal distances between nodes. (See the sep attribute.)
For more control of distances, one can use model=mds. In this case, the len of an edge is used as the ideal distance between its vertices. A shortest path calculation is only used for pairs of nodes not connected by an edge. Thus, by supplying a complete graph, the input can specify all of the relevant distances.
If sfdp is available, one can set overlap to "prism" to use a proximity graph-based algorithm for overlap removal. This is the preferred technique, though "scale" and "false" can work well with small graphs. This technique starts with a small scaling up, controlled by the overlap_scaling attribute, which can remove a significant portion of the overlap. The prism option also accepts an optional non-negative integer suffix. This can be used to control the number of attempts made at overlap removal. By default, overlap="prism" is equivalent to overlap="prism1000". Setting overlap="prism0" causes only the scaling phase to be run.
If the value is "compress", the layout will be scaled down as much as possible without introducing any overlaps, obviously assuming there are none to begin with.
N.B.The remaining allowed values of overlap correspond to algorithms which, at present, can produce bad aspect ratios. In addition, we deprecate the use of the "ortho*" and "portho*".
If the value is "vpsc", overlap removal is done as a quadratic optimization to minimize node displacement while removing node overlaps.
If the value is "orthoxy" or "orthoyx", overlaps are moved by optimizing two constraint problems, one for the x axis and one for the y. The suffix indicates which axis is processed first. If the value is "ortho", the technique is similar to "orthoxy" except a heuristic is used to reduce the bias between the two passes. If the value is "ortho_yx", the technique is the same as "ortho", except the roles of x and y are reversed. The values "portho", "porthoxy", "porthoxy", and "portho_yx" are similar to the previous four, except only pseudo-orthogonal ordering is enforced.
If the layout is done by neato with mode="ipsep", then one can use overlap=ipsep. In this case, the overlap removal constraints are incorporated into the layout algorithm itself. N.B. At present, this only supports one level of clustering.
Except for fdp and sfdp, the layouts assume overlap="true" as the default. Fdp first uses a number of passes using built-in, force-directed technique to remove overlaps. Thus, fdp accepts overlap with an integer prefix followed by a colon, specifying the number of tries. If there is no prefix, no initial tries will be performed. If there is nothing following a colon, none of the above methods will be attempted. By default, fdp uses overlap="9:portho". Note that overlap="true", overlap="0:true" and overlap="0:" all turn off all overlap removal.
By default, sfdp uses overlap="prism0".
Except for the Voronoi and prism methods, all of these transforms preserve the orthogonal ordering of the original layout. That is, if the x coordinates of two nodes are originally the same, they will remain the same, and if the x coordinate of one node is originally less than the x coordinate of another, this relation will still hold in the transformed layout. The similar properties hold for the y coordinates. This is not quite true for the "porth*" cases. For these, orthogonal ordering is only preserved among nodes related by an edge.
If overlap_scaling is negative, the layout is scaled by -1*overlap_scaling times the average label size. If overlap_scaling is positive, the layout is scaled by overlap_scaling. If overlap_scaling is zero, no scaling is done.
For layouts which always do packing, such a twopi, the pack attribute is just used to set the margin.
Normally, a small pad is used for aesthetic reasons, especially when a background color is used, to avoid having nodes and edges abutting the boundary of the drawn region.
If this is set and is smaller than the size of the layout, a rectangular array of pages of the specified page size is overlaid on the layout, with origins aligned in the lower-left corner, thereby partitioning the layout into pages. The pages are then produced one at a time, in pagedir order.
At present, this only works for PostScript output. For other types of output, one should use another tool to split the output into multiple output files. Or use the viewport to generate multiple files.
Note that a cluster inherits the root graph's attributes if defined. Thus, if the root graph has defined a pencolor, this will override a color or bgcolor attribute set for the cluster.
Previous to 31 January 2008, the effect of penwidth=W was achieved by including setlinewidth(W) as part of a style specification. If both are used, penwidth will be used.
Note: Due to an artifact of the implementation, final coordinates are translated to the origin. Thus, if you look at the output coordinates given in the (x)dot or plain format, pinned nodes will not have the same output coordinates as were given on input. If this is important, a simple workaround is to maintain the coordinates of a pinned node. The vector difference between the old and new coordinates will give the translation, which can then be subtracted from all of the appropriate coordinates.
In neato and fdp, pos can be used to set the initial position of a node. By default, the coordinates are assumed to be in inches. However, the -s command line flag can be used to specify different units. As the output coordinates are in points, feeding the output of a graph laid out by a Graphviz program into neato or fdp will almost always require the -s flag.
When the -n command line flag is used with neato, it is assumed the positions have been set by one of the layout programs, and are therefore in points. Thus, neato -n can accept input correctly without requiring a -s flag and, in fact, ignores any such flag.
A TRUE bool value corresponds to "normal"; a FALSE bool value corresponds to "none". As a slight exception to the normal interpretation of bool, a value of "2" corresponds to "fast".
T -> H;
will go
from left to right. By default, graphs are laid out from top to bottom.
This attribute also has a side-effect in determining how record nodes are interpreted. See record shapes.
In twopi, this attribute specifies the radial separation of concentric circles. For twopi, ranksep can also be a list of doubles. The first double specifies the radius of the inner circle; the second double specifies the increase in radius from the first circle to the second; etc. If there are more circles than numbers, the last number is used as the increment for the remainder.
If ratio is numeric, it is taken as the desired aspect ratio. Then, if the actual aspect ratio is less than the desired ratio, the drawing height is scaled up to achieve the desired ratio; if the actual ratio is greater than that desired ratio, the drawing width is scaled up.
If ratio = "fill" and the size attribute is set, node positions are scaled, separately in both x and y, so that the final drawing exactly fills the specified size. If both size values exceed the width and height of the drawing, then both coordinate values of each node are scaled up accordingly. However, if either size dimension is smaller than the corresponding dimension in the drawing, one dimension is scaled up so that the final drawing has the same aspect ratio as specified by size. Then, when rendered, the layout will be scaled down uniformly in both dimensions to fit the given size, which may cause nodes and text to shrink as well. This may not be what the user wants, but it avoids the hard problem of how to reposition the nodes in an acceptable fashion to reduce the drawing size.
If ratio = "compress" and the size attribute is set, dot attempts to compress the initial layout to fit in the given size. This achieves a tighter packing of nodes but reduces the balance and symmetry. This feature only works in dot.
If ratio = "expand", the size attribute is set, and both the width and the height of the graph are less than the value in size, node positions are scaled uniformly until at least one dimension fits size exactly. Note that this is distinct from using size as the desired size, as here the drawing is expanded before edges are generated and all node and text sizes remain unchanged.
If ratio = "auto", the page attribute is set and the graph cannot be drawn on a single page, then size is set to an ``ideal'' value. In particular, the size in a given dimension will be the smallest integral multiple of the page size in that dimension which is at least half the current size. The two dimensions are then scaled independently to the new size. This feature only works in dot.
If the attribute begins with a plus sign '+', an additive margin is specified. That is, "+w,h" causes the node's bounding box to be increased by w points on the left and right sides, and by h points on the top and bottom. Without a plus sign, the node is scaled by 1 + w in the x coordinate and 1 + h in the y coordinate.
If only a single number is given, this is used for both dimensions.
If unset but esep is defined, the sep values will be set to the esep values divided by 0.8. If esep is unset, the default value is used.
There is one exception to this usage. If shape is set to "epsf", shapefile gives a filename containing a definition of the node in PostScript. The graphics defined must be contain all of the node content, including any desired boundaries. For further details, see External PostScript files.
If defined and the drawing is larger than the given size, the drawing is uniformly scaled down so that it fits within the given size.
If size ends in an exclamation point (!), then it is taken to be the desired size. In this case, if both dimensions of the drawing are less than size, the drawing is scaled up uniformly until at least one dimension equals its dimension in size.
Note that there is some interaction between the size and ratio attributes.
(1 March 2007) The values line and spline can be used as synonyms for false and true, respectively. In addition, the value polyline specifies that edges should be drawn as polylines.
By default, the attribute is unset. How this is interpreted depends on the layout. For dot, the default is to draw edges as splines. For all other layouts, the default is to draw edges as line segments. Note that for these latter layouts, if splines="true", this requires non-overlapping nodes (cf. overlap). If fdp is used for layout and splines="compound", then the edges are drawn to avoid clusters as well as nodes.
Use of color palettes results in less memory usage during creation of the bitmaps and smaller output files.
Usually, the only time it is necessary to specify the truetype model is if the graph uses more than 256 colors. However, if one uses bgcolor=transparent with a color palette, font antialiasing can show up as a fuzzy white area around characters. Using truecolor=true avoids this problem.
Provides z coordinate value for 3D layouts and displays. If the graph has dim set to 3 (or more), neato will use a node's z value for the z coordinate of its initial position if its pos attribute is also defined.
Even if no z values are specified in the input, it is necessary to declare a z attribute for nodes, e.g, using node[z=""] in order to get z values on output. Thus, setting dim=3 but not declaring z will cause neato -Tvrml to layout the graph in 3D but project the layout onto the xy-plane for the rendering. If the z attribute is declared, the final rendering will be in 3D.
"normal" | ![]() | "inv" | ![]() |
"dot" | ![]() | "invdot" | ![]() |
"odot" | ![]() | "invodot" | ![]() |
"none" | ![]() | "tee" | ![]() |
"empty" | ![]() | "invempty" | ![]() |
"diamond" | ![]() | "odiamond" | ![]() |
"ediamond" | ![]() | "crow" | ![]() |
"box" | ![]() | "obox" | ![]() |
"open" | ![]() | "halfopen" | ![]() |
"vee" | ![]() |
These are the basic set of backward-compatible arrow shapes. In addition, there is a grammar of arrow shapes 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 above contain all of the primitive shapes (box, crow, diamond, dot, inv, none, normal, tee, vee) plus ones that can be derived from the grammar (odot, invdot, invodot, obox, odiamond) plus some supported as special cases for backward-compatibility (ediamond, open, halfopen, empty, invempty).
An aspect ratio, double, followed optionally by a ',' and a maximum pass count. If the aspect ratio is given, but no maximum pass count, the latter defaults to 5.
"#%2x%2x%2x" | Red-Green-Blue (RGB) |
"#%2x%2x%2x%2x" | Red-Green-Blue-Alpha (RGBA) |
H[, ]+S[, ]+V | Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0 |
string | color name |
String-valued color specifications are case-insensitive and interpreted in the context of the current color scheme, as specified by the colorscheme attribute. If this is undefined, the X11 naming scheme will be used. An initial "/" character can be used to override the use of the colorscheme attribute. In particular, a single initial "/" will cause the string to be evaluated using the default X11 naming. If the color value has the form "/ssss/yyyy", the name yyyy is interpreted using the schema ssss. If the color scheme name is empty, i.e., the color has the form "//yyyy", the colorscheme attribute is used. Thus, the forms "yyyy" and "//yyyy" are equivalent.
At present, Graphviz recognizes the default color scheme X11, and the Brewer color schemes (cf. ColorBrewer). Please note that Brewer color schemes are covered by this license.
Examples:
Color | RGB | HSV | String |
---|---|---|---|
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" |
The string value transparent can be used to indicate no color. This is only available in the output formats ps, svg, fig, vmrl, and the bitmap formats. It can be used whenever a color is needed but is most useful with the bgcolor attribute. Usually, the same effect can be achieved by setting style to invis.
T -> H;
"forward" | ![]() | "back" | ![]() |
"both" | ![]() | "none" | ![]() |
For undirected edges T -- H;
, one of the nodes, usually
the righthand one, is treated as the head for the purpose of
interpreting "forward" and "back".
In addition, if the associated attribute is label, headlabel or taillabel, the escape sequences "\n", "\l" and "\r" divide the label into lines, centered, left-justified, and right-justified, respectively.
The modes "node", "clust" or "graph" specify that the components should be packed together tightly, using the specified granularity. A value of "node" causes packing at the node and edge level, with no overlapping of these objects. This produces a layout with the least area, but it also allows interleaving, where a node of one component may lie between two nodes in another component. A value of "graph" does a packing using the bounding box of the component. Thus, there will be a rectangular region around a component free of elements of any other component. A value of "clust" guarantees that top-level clusters are kept intact. What effect a value has also depends on the layout algorithm. For example, neato does not support clusters, so a value of "clust" will have the same effect as the default "node" value.
The mode "array[_flags][%d]" indicates that the components should be packed at the graph level into an array of graphs. By default, the components are in row-major order, with the number of columns roughly the square root of the number of components. If the optional flags contains "c", then column-major order is used. Finally, if the optional integer suffix is used, this specifies the number of columns for row-major or the number of rows for column-major. Thus, the mode "array_c4" indicates array packing, with 4 rows, starting in the upper left and going down the first column, then down the second column, etc., until all components are used.
If the optional flags contains "u", this causes the insertion order of elements in the array to be determined by user-supplied values. Each component can specify its sort value by a non-negative integer using the sortv attribute. Components are inserted in order, starting with the one with the smallest sort value. If no sort value is specified, zero is used.
If dim is 3 or more, point may also have the format "%f,%f,%f"('!') to represent the point (x,y,z).
If a compass point is used, it must have the form "n","ne","e","se","s","sw","w","nw","c","_". This modifies the edge placement to aim for the corresponding compass point on the port or, in the second form where no portname is supplied, on the node itself. The compass point "c" specifies the center of the node or port. The compass point "_" specifies that an appropriate side of the port adjacent to the exterior of the node should be used, if such exists. Otherwise, the center is used. If no compass point is used with a portname, the default value is "_".
This attribute can be attached to an edge using the headport and tailport attributes, or as part of the edge description as in
Note that it is legal to have a portname the same as one of the compass points. In this case, this reference will be resolved to the port. Thus, if node A has a port w, then headport=w will refer to the port and not the compass point. At present, in this case, there is no way to specify that the compass point should be used.
Using "fast" gives about a 2-4 times overall speedup compared with "normal", though layout quality can suffer a little.
where spline | = | (endp)? (startp)? point (triple)+ |
and triple | = | point point point |
and endp | = | "e,%f,%f" |
and startp | = | "s,%f,%f" |
If style is present, it must be one of the strings "regular", "self", or "random". In the first case, the nodes are placed regularly about a circle. In the second case, an abbreviated version of neato is run to obtain the initial layout. In the last case, the nodes are placed randomly in a unit square.
If seed is present, it specifies a seed for the random number generator. If seed is a positive number, this is used as the seed. If it is anything else, the current time, and possibly the process id, is used to pick a seed, thereby making the choice more random. In this case, the seed value is stored in the graph.
If the value is just "random", a time-based seed is chosen.
Note that input positions, specified by a node's pos attribute, are only used when the style is "random".
where styleItem | = | name or name'('args')' |
and args | = | name ( ',' name )* |
and name | = | [^)(, ][^)(,]* |
At present, the recognized style names are "dashed", "dotted", "solid", "invis" and "bold" for nodes and edges, and "filled", "diagonals" and "rounded" for nodes only. The styles "filled" and "rounded" are recognized for clusters. Additional styles are available in device-dependent form. Style lists are passed to device drivers, which can use this to generate appropriate output.
The setlinewidth style value can be used for more control over the width of node borders and edges than is allowed by bold. This style value takes an argument, specifying the width of the line in points. For example, style="bold" is equivalent to style="setlinewidth(2)". The use of setlinewidth is deprecated; one should use the penwidth attribute instead.
The viewPort W,H,Z,x,y or W,H,Z,N specifies a viewport for the final image. The pair (W,H) gives the dimensions (width and height) of the final image, in points. The optional Z is the zoom factor, i.e., the image in the original layout will be W/Z by H/Z points in size. By default, Z is 1. The optional last part is either a pair (x,y) giving a position in the original layout of the graph, in points, of the center of the viewport, or the name N of a node whose center should used as the focus. By default, the focus is the center of the graph bounding box, i.e., (bbx/2,bby/2), where "bbx,bby" is the value of the bounding box attribute bb.
Sample values: 50,50,.5,'2.8 BSD' or 100,100,2,450,300. The first will take the 100x100 point square centered on the node 2.8 BSD and scale it down by 0.5, yielding a 50x50 point final image.