3D Force-Directed Layout
Previous
Layout Overview
Next
AntvDagre Layout
Loading...
The D3Force3D layout is a 3D extension based on d3-force, which simulates physical forces in three-dimensional space to achieve automatic layout. Compared to 2D layouts, it adds force effects in the Z-axis direction, allowing richer data relationships to be displayed in 3D space.
D3Force3D extends the traditional 2D force-directed layout with the following forces:
The layout is computed through iterations, mainly involving the following parameters:
Property | Description | Type | Default | Required |
---|---|---|---|---|
type | Layout type | string | d3-force-3d | ✓ |
nodeSize | Node size (diameter), used for collision detection | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
iterations | Number of force iterations; higher means more precise but slower | number | - | |
numDimensions | Number of dimensions (2 or 3) | number | 3 | |
forceSimulation | Custom force simulation method | Simulation<NodeDatum, EdgeDatum> | - | |
onTick | Callback for each iteration | (data: LayoutMapping) => void | - | |
randomSource | Random number generator | () => number | - |
Property | Description | Type | Default | Required |
---|---|---|---|---|
alpha | Current convergence threshold | number | 1 | |
alphaDecay | Convergence decay rate (0-1) | number | 0.028 | |
alphaMin | Stop iteration threshold | number | 0.001 | |
alphaTarget | Target convergence threshold | number | 0 | |
velocityDecay | Velocity decay factor | number | 0.4 |
Property | Description | Type | Default | Required |
---|---|---|---|---|
center.x | Center x coordinate | number | 0 | |
center.y | Center y coordinate | number | 0 | |
center.z | Center z coordinate | number | 0 | |
center.strength | Force strength | number | 1 |
Property | Description | Type | Default | Required |
---|---|---|---|---|
collide.radius | Collision radius | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | 10 | |
collide.strength | Force strength | number | 1 | |
collide.iterations | Collision iterations | number | 1 |
Property | Description | Type | Default | Required |
---|---|---|---|---|
link.id | Edge id generator | (edge: EdgeDatum, index: number, edges: EdgeDatum[]) => string | edge.id | |
link.distance | Ideal edge length | number | ((edge: EdgeDatum, index: number, edges: EdgeDatum[]) => number) | 30 | |
link.strength | Force strength | number | ((edge: EdgeDatum, index: number, edges: EdgeDatum[]) => number) | 1 | |
link.iterations | Link force iterations | number | 1 |
Property | Description | Type | Default | Required |
---|---|---|---|---|
manyBody.strength | Force strength | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | -30 | |
manyBody.theta | Barnes-Hut accuracy | number | 0.9 | |
manyBody.distanceMin | Minimum interaction distance | number | 1 | |
manyBody.distanceMax | Maximum interaction distance | number | Infinity |
Property | Description | Type | Default | Required |
---|---|---|---|---|
radial.strength | Force strength | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | 0.1 | |
radial.radius | Target radius | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | 100 | |
radial.x | Sphere center x | number | 0 | |
radial.y | Sphere center y | number | 0 | |
radial.z | Sphere center z | number | 0 |
Each axis can be configured separately:
Property | Description | Type | Default | Required |
---|---|---|---|---|
x.strength | X-axis force strength | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
x.x | Target x coordinate | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
y.strength | Y-axis force strength | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
y.y | Target y coordinate | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
z.strength | Z-axis force strength | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
z.z | Target z coordinate | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - |