Hierarchical Drawing of Directed Graphs

LayeredGraphPlot attempts to draw the vertices of a graph in a series of layers, placing dominant vertices at the top, and vertices lower in the hierarchy progressively further down.

LayeredGraphPlot[{vi1->vj1,vi2->vj2,...}]
generate a layered plot of the graph in which vertex is connected to vertex
LayeredGraphPlot[{{vi1->vj1,lbl1},...}]
associate labels with edges in the graph
LayeredGraphPlot[g,pos]place the dominant vertices in the plot at position pos
LayeredGraphPlot[m]generate a layered plot of the graph represented by the adjacency matrix m

Hierarchical graph drawing.

LayeredGraphPlot draws a graph so that the edges point predominantly downward. The second argument of LayeredGraphPlot specifies the position of the root. Possible values for this argument are Right, Left, Top, and Bottom.

This plots a directed graph.
In[1]:=
Click for copyable input
Out[1]=
This is the same graph, with edges pointing from left to right.
In[2]:=
Click for copyable input
Out[2]=

LayeredGraphPlot may produce slightly different output on different platforms, due to floating-point differences.

Options for LayeredGraphPlot

In addition to options for Graphics, the following options are accepted for LayeredGraphPlot.

option name
default value
DataRangeAutomaticthe range of vertex coordinates to generate
DirectedEdgesTruewhether to show edges as directed arrows
EdgeLabelingTruewhether to include labels given for edges
EdgeRenderingFunctionAutomaticfunction to give explicit graphics for edges
MultiedgeStyleAutomatichow to draw multiple edges between vertices
PackingMethodAutomaticmethod to use for packing components
PlotRangePaddingAutomatichow much padding to put around the plot
PlotStyleAutomaticstyle in which objects are drawn
SelfLoopStyleAutomatichow to draw edges linking a vertex to itself
VertexCoordinateRulesAutomaticrules for explicit vertex coordinates
VertexLabelingAutomaticwhether to show vertex names as labels
VertexRenderingFunctionAutomaticfunction to give explicit graphics for vertices

Options for LayeredGraphPlot.

DirectedEdges

The option DirectedEdges specifies whether to draw edges as arrows. Possible values for this option are True or False. The default value for this option is True.

This shows a graph with edges represented by lines instead of arrows.
In[3]:=
Click for copyable input
Out[3]=

EdgeLabeling

The option EdgeLabeling specifies whether and how to display labels given for the edges. Possible values for this option are True, False, or Automatic. The default value for this option is True, which displays the supplied edge labels on the graph. With EdgeLabeling->Automatic, the labels are shown as tooltips.

This displays the specified edge label.
In[4]:=
Click for copyable input
Out[4]=
This displays the labels as tooltips. Place the cursor over the edge between vertices 3 and 6 to see the tooltip.
In[5]:=
Click for copyable input
Out[5]=
Alternatively, use Tooltip[vi->vj, lbl] to specify a tooltip for an edge. Place the cursor over the edge between vertices 3 and 6, as well as the edge label on the edge between vertices 3 and 5, to see the tooltips.
In[6]:=
Click for copyable input
Out[6]=

EdgeRenderingFunction

The option EdgeRenderingFunction specifies graphical representation of the graph edges. Possible values for this option are Automatic, None, or a function that gives a proper combination of graphics primitives and directives. With the default setting of Automatic, a dark red line is drawn for each edge. With EdgeRenderingFunction->None, edges are not drawn.

This draws vertices only.
In[7]:=
Click for copyable input
Out[7]=

With EdgeRenderingFunction->g, each edge is rendered with the graphics primitives and directives given by the function g. It can take three or more arguments in the form , where , are the coordinates of the beginning and ending points of the edge, , are the beginning and ending vertices, and is any label specified for the edge or None. Explicit settings for EdgeRenderingFunction->g override settings for EdgeLabeling and DirectedEdges.

This plots edges as gray arrows with ends set back from vertices by a distance of 0.3 (in the graph's coordinate system).
In[8]:=
Click for copyable input
Out[8]=
This displays edges and self-loops with black and red arrows, respectively. The function LineScaledCoordinate from the Graph Utilities Package adds text at 70% along arrows.
In[9]:=
Click for copyable input
In[10]:=
Click for copyable input
Out[10]=

MultiedgeStyle

The option MultiedgeStyle specifies whether to draw multiple edges between two vertices. Possible values for MultiedgeStyle are Automatic (the default), True, False, or a positive real number. With the default setting MultiedgeStyle->Automatic, multiple edges are shown for a graph specified by a list of rules, but not shown if the graph is specified by an adjacency matrix. With MultiedgeStyle->, the multiedges are spread out to a scaled distance of .

By default, multiple edges are shown if a graph is given as a list of rules.
In[11]:=
Click for copyable input
Out[11]=
But multiple edges are not shown for graphs specified by an adjacency matrix.
In[12]:=
Click for copyable input
Out[12]=
This spreads multiple edges by the specified amount.
In[13]:=
Click for copyable input
Out[13]=

PackingMethod

The option PackingMethod specifies the method used for packing disconnected components. Possible values for the option are Automatic (the default), , , , , , and . With PackingMethod->"ClosestPacking", components are packed as close together as possible using a polyomino method [6], starting from the top left. With PackingMethod->"ClosestPackingCenter", components are packed starting from the center. With PackingMethod->"Layered", components are packed in layers starting from top left. With PackingMethod->"LayeredLeft" or PackingMethod->"LayeredTop", components are packed in layers starting from the top/left, respectively. With PackingMethod->"NestedGrid", components are arranged in a nested grid. The typical effective default setting is PackingMethod->"Layered", and the packing starts with components of the largest bounding box area.

This shows the packing of disconnected components by the default method.
In[14]:=
Click for copyable input
Out[14]=
This shows the packing of disconnected components using the method.
In[15]:=
Click for copyable input
Out[15]=

PlotRangePadding

PlotRangePadding is a common option for graphics functions inherited by LayeredGraphPlot.

PlotStyle

PlotStyle is a common option for graphics functions inherited by LayeredGraphPlot. The option PlotStyle specifies the style in which objects are drawn.

Draw edges with thicker arrows, and both edges and vertices' labels in red.
In[16]:=
Click for copyable input
Out[16]=

SelfLoopStyle

The option SelfLoopStyle specifies whether and how to draw loops for vertices that are linked to themselves. Possible values of the option are Automatic (the default), True, False, or a positive real number. With SelfLoopStyle->Automatic, self-loops are shown if the graph is specified by a list of rules, but not by an adjacency matrix. With SelfLoopStyle->, the self-loops are drawn with a diameter of (relative to the average edge length).

By default, self-loops are displayed for a graph specified by a list of rules.
In[17]:=
Click for copyable input
Out[17]=
Self-loops are not shown if the graph is specified by an adjacency matrix.
In[18]:=
Click for copyable input
Out[18]=
This shows self-loops with diameter equal to 0.3 times the average length of the edges.
In[19]:=
Click for copyable input
Out[19]=

VertexCoordinateRules

The option VertexCoordinateRules specifies the coordinates of the vertices. Possible values are None, or a list of coordinates. Coordinates specified by a list of rules are not currently supported by LayeredGraphPlot.

This draws the Petersen graph using known coordinates.
In[20]:=
Click for copyable input
Out[20]=
This draws with the default method.
In[21]:=
Click for copyable input
Out[21]=

VertexLabeling

The option VertexLabeling specifies whether to show vertex names as labels. Possible values for this option are True, False, Automatic (the default) and Tooltip. VertexLabeling->True shows the labels. For graphs specified by an adjacency matrix, vertex labels are taken to be successive integers , where n is the size of the matrix. For graphs specified by a list of rules, labels are the expressions used in the rules. VertexLabeling->False displays each vertex as a point. VertexLabeling->Tooltip displays each vertex as a point, but gives its name in a tooltip. VertexLabeling->Automatic displays each vertex as a point, giving its name in a tooltip if the number of vertices is not too large. You can also use Tooltip[vk, vlbl] anywhere in the list of rules to specify an alternative tooltip for a vertex .

This draws the graph with labels given as indices of the adjacency matrix.
In[22]:=
Click for copyable input
Out[22]=
This uses the labels specified in the list of rules.
In[23]:=
Click for copyable input
Out[23]=
This plots vertices as points, and displays vertex names in tooltips. Place the cursor above the vertices to see the labels.
In[24]:=
Click for copyable input
Out[24]=

VertexRenderingFunction

The option VertexRenderingFunction specifies graphical representation of the graph edges. Possible values for this option are Automatic, None, or a function that gives a proper combination of graphics primitives and directives. With the default setting of Automatic, vertices are displayed as points, with their names given in tooltips.

By default, vertices are displayed as points and, for small graphs, labeled in tooltips. Point the cursor at a vertex to see the tooltip.
In[22]:=
Click for copyable input
In[23]:=
Click for copyable input
Out[23]=
This draws the same graph, but without the vertices.
In[24]:=
Click for copyable input
Out[24]=

With VertexRenderingFunction->g, each vertex is rendered with the graphics primitives given by , where is the coordinate of the vertex and is the label of the vertex. Explicit settings for VertexRenderingFunction->g override settings for VertexLabeling.

This shows vertices as yellow disks.
In[27]:=
Click for copyable input
Out[27]=

Example Gallery

Flow Chart

LayeredGraphPlot helps visualize flow charts, for example for business, economic, or technical presentations.

This shows a flow chart.
In[28]:=
Click for copyable input
Out[28]=
This shows a flow chart that flows from left to right.
In[29]:=
Click for copyable input
Out[29]=

Food Chains

Food chains can be visualized with LayeredGraphPlot.

This shows a small food chain.
In[30]:=
Click for copyable input
Out[30]=
This shows another food chain.
In[2]:=
Click for copyable input
Out[2]=

History of Unix

LayeredGraphPlot is suitable for visualizing historical events.

This shows a history of Unix.
In[32]:=
Click for copyable input
Out[32]=
New to Mathematica? Find your learning path »
Have a question? Ask support »