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),nbeing 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});