D3Force3D 3D 力导向布局
上一篇
D3Force 力导向布局
下一篇
Dagre 布局
Loading...
D3Force3D 布局是基于 d3-force 的三维扩展版本,通过在三维空间中模拟物理力的作用来实现自动布局。相比二维布局,它增加了 Z 轴方向的力作用,能够在三维空间中展现更丰富的数据关系。
D3Force3D 在传统二维力导向布局的基础上,扩展了以下力的作用:
布局计算通过迭代来实现,主要涉及以下参数:
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
type | 布局类型 | string | d3-force-3d | ✓ |
nodeSize | 节点大小(直径),用于碰撞检测防止节点重叠 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
iterations | 力的迭代次数,值越大布局越精确但性能消耗越大 | number | - | |
numDimensions | 维度数量(2 或 3) | number | 3 | |
forceSimulation | 自定义力模拟方法 | Simulation<NodeDatum, EdgeDatum> | - | |
onTick | 每次迭代的回调函数 | (data: LayoutMapping) => void | - | |
randomSource | 随机数生成函数 | () => number | - |
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
alpha | 当前迭代收敛阈值 | number | 1 | |
alphaDecay | 收敛阈值衰减率(0-1) | number | 0.028 | |
alphaMin | 停止迭代的阈值 | number | 0.001 | |
alphaTarget | 目标收敛阈值 | number | 0 | |
velocityDecay | 速度衰减因子 | number | 0.4 |
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
center.x | 中心点 x 坐标 | number | 0 | |
center.y | 中心点 y 坐标 | number | 0 | |
center.z | 中心点 z 坐标 | number | 0 | |
center.strength | 力的强度 | number | 1 |
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
collide.radius | 碰撞半径 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | 10 | |
collide.strength | 力的强度 | number | 1 | |
collide.iterations | 碰撞检测的迭代次数 | number | 1 |
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
link.id | 边的 id 生成函数 | (edge: EdgeDatum, index: number, edges: EdgeDatum[]) => string | edge.id | |
link.distance | 理想边长 | number | ((edge: EdgeDatum, index: number, edges: EdgeDatum[]) => number) | 30 | |
link.strength | 力的强度 | number | ((edge: EdgeDatum, index: number, edges: EdgeDatum[]) => number) | 1 | |
link.iterations | 链接力的迭代次数 | number | 1 |
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
manyBody.strength | 力的强度 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | -30 | |
manyBody.theta | Barnes-Hut 算法的精度参数 | number | 0.9 | |
manyBody.distanceMin | 最小作用距离 | number | 1 | |
manyBody.distanceMax | 最大作用距离 | number | Infinity |
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
radial.strength | 力的强度 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | 0.1 | |
radial.radius | 目标半径 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | 100 | |
radial.x | 球心 x 坐标 | number | 0 | |
radial.y | 球心 y 坐标 | number | 0 | |
radial.z | 球心 z 坐标 | number | 0 |
每个方向的力可以单独配置:
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
x.strength | X 轴方向的力强度 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
x.x | 目标 x 坐标 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
y.strength | Y 轴方向的力强度 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
y.y | 目标 y 坐标 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
z.strength | Z 轴方向的力强度 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - | |
z.z | 目标 z 坐标 | number | ((node: NodeDatum, index: number, nodes: NodeDatum[]) => number) | - |