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: