Accelerate some parallelizable algorithms such as Fruchterman with WebGPU which has a better performance under large amount of data.
# npm
$ npm install @antv/layout-gpu --save
# yarn
$ yarn add @antv/layout-gpu
Choose a layout algorithm from @antv/layout-gpu
then.
import { Graph } from "@antv/graphlib";
import { FruchtermanLayout } from "@antv/layout-gpu";
const graph = new Graph({ nodes: [], edges: [] });
const fruchtermanLayout = new FruchtermanLayout();
(async () => {
// Return positions of nodes & edges.
const positions = await fruchtermanLayout.execute(graph);
// Or to directly assign the positions to the nodes:
await circularLayout.assign(graph);
})();
Import scripts in UMD version of @antv/graphlib
, @antv/layout
and @antv/layout-gpu
.
<script
src="https://unpkg.com/@antv/graphlib"
type="application/javascript"
></script>
<script
src="https://unpkg.com/@antv/layout"
type="application/javascript"
></script>
<script
src="https://unpkg.com/@antv/layout-gpu"
type="application/javascript"
></script>
Use layouts under LayoutGPU
namespace.
const { Graph } = window.GraphLib;
const { FruchtermanLayout } = window.LayoutGPU;
We provide the following parallelizable layouts:
import { Graph } from "@antv/graphlib";
import { FruchtermanLayout } from "@antv/layout-gpu";
const graph = new Graph({ nodes: [], edges: [] });
const fruchtermanLayout = new FruchtermanLayout({
center: [200, 200],
});
const positions = await fruchtermanLayout.execute(graph);
Fruchterman is a kind of force-directed layout. The implementation is according to the paper Graph Drawing by Force-directed Placement.
LayoutOptions:
center
[number, number] The center of the graph. e.g.[0, 0]
width
number The width of the graph. The default value is300
.height
number The height of the graph. The default value is300
.maxIteration
number The default value is1000
.gravity
number The gravity, which will affect the compactness of the layout. The default value is10
.speed
number The moving speed of each iteraction. Large value of the speed might lead to violent swing. The default value is5
.
The scripts and documentation in this project are released under the MIT License.