Directed graph
Directed Graph package provides automatic layout of directed graphs. This package uses the open-source (MIT license) Dagre library internally.
The package exposes the DirectionGraph
object which contains several functions including layout()
, which provides functionality for rearranging your diagram into the desired layout.
Installation
Install the Directed graph open-source package (@joint/layout-directed-graph
) using your package manager:
- npm
- pnpm
- yarn
npm add @joint/layout-directed-graph
pnpm add @joint/layout-directed-graph
yarn add @joint/layout-directed-graph
Now, you can import functionality from @joint/layout-directed-graph
into your application as necessary:
import { DirectedGraph } from '@joint/layout-directed-graph';
The following example illustrates the layout()
function. The first parameter can be a dia.Graph
or an array of dia.Cells
that we want to lay out. The second parameter is an object that contains various options for configuring the layout:
const graphBBox = DirectedGraph.layout(graph, {
nodeSep: 50,
edgeSep: 80,
rankDir: "TB"
});
console.log('x:', graphBBox.x, 'y:', graphBBox.y)
console.log('width:', graphBBox.width, 'height:', graphBBox.height);
A blog post explaining the usage of the layout()
function in more detail can be found here.
There is also a UMD version available
Place the UMD distribution of the plugin into the root of your package.
One way to do that is via NPM
-
Install the Directed graph open-source package (
@joint/layout-directed-graph
) using NPM:npm add @joint/layout-directed-graph
-
Navigate to the newly created
node_modules
folder. -
Copy the
@joint/layout-directed-graph/dist/DirectedGraph.js
file and paste it into the root of your package.
Place the source code of the two required dependencies - graphlib.core.js
and dagre.js
- into the root of your package.
One way to do that is via NPM (continuing from above)
- Navigate to the
node_modules
folder. - Copy the
@dagrejs/graphlib/dist/graphlib.core.js
file and paste it into the root of your package. - Copy the
@dagrejs/dagre/dist/dagre.js
file and paste it into the root of your package.
Include DirectedGraph.js
plus its dependencies graphlib.core.js
and dagre.js
in your HTML:
- JointJS
- JointJS+
<script src="joint.js"></script>
<script src="graphlib.core.js"></script>
<script src="dagre.js"></script>
<script src="DirectedGraph.js"></script>
Access DirectedGraph
through the joint.layout
namespace:
const graphBBox = joint.layout.DirectedGraph.layout(graph, {
nodeSep: 50,
edgeSep: 80,
rankDir: "TB"
});
console.log('x:', graphBBox.x, 'y:', graphBBox.y)
console.log('width:', graphBBox.width, 'height:', graphBBox.height);
Interactive example
In this example, the diagram presents a visual representation of the adjacency list specified in the text field above it, laid out with the layout()
function.
Try adding/removing/changing some lines from the adjacency list and then clicking the "Layout" button. If your modifications create a valid adjacency list specification, the diagram will be refreshed with your new content.
Example with clusters
The layout()
function is able to handle clusters of nodes as well (i.e. embedded JointJS Elements). The following demo presents a complex example: