A clustering attraction force to group nodes for the d3-force simulation engine.
npm install d3-force-clusteringd3.forceClustering
==================
[![NPM package][npm-img]][npm-url]
[![Build Size][build-size-img]][build-size-url]
[![NPM Downloads][npm-downloads-img]][npm-downloads-url]
A custom attraction force that groups nodes into clusters based on a shared cluster ID. Nodes within the same cluster are gradually pulled toward their cluster’s dynamic center of gravity, with a spring-like force whose intensity increases linearly with distance.
This force plugin is designed to be used with the d3-force simulation engine. It is also compatible with d3-force-3d and can function in a one, two (default) or three-dimensional space.
``js`
import d3ForceClustering from 'd3-force-clustering';`
or using a script taghtml``
thenjs`
d3.forceSimulation()
.nodes(
.force('cluster', d3.forceClustering()
.clusterId(node => node.cluster)
);
| Method | Description | Default |
|----------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------:|
| clusterId([fn]) | Sets or gets the accessor function that returns the cluster ID for each node. Use this to define which cluster a node belongs to. | node => node.cluster |node => node.r ** 2
| weight([fn]) | Sets or gets the accessor for node weight, which influences the cluster's centroid position. Often proportional to node area, e.g., , so that larger nodes move less than smaller ones. By default all nodes have equal weight. | node => 1 |(clusterId, clusterNodes) => strength
| strength([num or fn]) | Sets or gets the force strength. Can be a constant or a function: . This strength defines how strong is the attraction force between the nodes in a given cluster. A strength of 1 applies full force; 0` disables it. | 0.2 |
| distanceMin([num]) | Minimum distance from a node to the cluster’s centroid in order for the attraction force to act. Helps prevent jittering for closely grouped nodes. | 0 |
If you find this module useful and would like to support its development, you can buy me a ☕. Your contributions help keep open-source sustainable!

[npm-img]: https://img.shields.io/npm/v/d3-force-clustering
[npm-url]: https://npmjs.org/package/d3-force-clustering
[build-size-img]: https://img.shields.io/bundlephobia/minzip/d3-force-clustering
[build-size-url]: https://bundlephobia.com/result?p=d3-force-clustering
[npm-downloads-img]: https://img.shields.io/npm/dt/d3-force-clustering
[npm-downloads-url]: https://www.npmtrends.com/d3-force-clustering