JavaScript implementation of the ForceAtlas2 algorithm for graphology.
Jacomy M, Venturini T, Heymann S, Bastian M (2014) ForceAtlas2, a Continuous Graph Layout Algorithm for Handy Network Visualization Designed for the Gephi Software. PLoS ONE 9(6): e98679. https://doi.org/10.1371/journal.pone.0098679
npm install graphology-layout-forceatlas2
- adjustSizes ?boolean [
false
]: should the node's sizes be taken into account? - barnesHutOptimize ?boolean [
false
]: whether to use the Barnes-Hut approximation to compute repulsion inO(n*log(n))
rather than defaultO(n^2)
,n
being the number of nodes. - barnesHutTheta ?number [
0.5
]: Barnes-Hut approximation theta parameter. - edgeWeightInfluence ?number [
0
]: influence of the edge's weights on the layout. - gravity ?number [
1
]: strength of the layout's gravity. - linLogMode ?boolean [
false
]: whether to use Noack's LinLog model. - outboundAttractionDistribution ?boolean [
false
] - scalingRatio ?number [
1
] - slowDown ?number [
1
] - strongGravityMode ?boolean [
false
]
import forceAtlas2 from 'graphology-layout-forceatlas2';
const positions = forceAtlas2(graph, {iterations: 50});
// With settings:
const positions = forceAtlas2(graph, {
iterations: 50,
settings: {
gravity: 10
}
});
// To directly assign the positions to the nodes:
forceAtlas2.assign(graph);
Arguments
- graph Graph: target graph.
- options object: options:
- iterations number: number of iterations to perform.
- settings ?object: the layout's settings (see #settings).
If you need to run the layout's computation in a web worker, the library comes with a utility to do so:
Example
import FA2Layout from 'graphology-layout-forceatlas2/worker';
const layout = new FA2Layout(graph);
// To start the layout
layout.start({settings: {gravity: 1}});
// To stop the layout
layout.stop();
// To kill the layout and release attached memory
layout.kill();
If you don't know how to tune the layout's settings and want to infer them from your graph, you can use the #.inferSettings
method:
import forceAtlas2 from 'graphology-layout-forceatlas2';
const saneSettings = forceAtlas2.inferSettings(graph);
const positions = forceAtlas2(graph, {iterations: 50, settings: saneSettings});