D3.js - 固定某些节点坐标的力导向布局

本文介绍了如何在D3.js的力导向布局中固定某些节点的坐标,使得这些节点的位置在布局过程中保持不变。通过设置节点的fx和fy属性,可以实现节点的固定,并在代码中展示了具体实现。
摘要由CSDN通过智能技术生成

在绘制节点链接图时,有时会存在这样的需求:我们需要固定某些节点的坐标,而其它节点遵循力导向布局,坐标位置不断变换,直到得到稳定的布局结果

效果图如下图所示,红色节点是固定了坐标的节点,灰色节点没有固定坐标,在力导向布局过程中红色节点的坐标始终不会发生变化。
固定某些节点坐标的力导向布局
在线演示:https://codepen.io/yangkui/pen/YzPGjgP

在 D3.js 中,如果想要某个节点固定在一个位置,可以指定以下两个额外的属性:

  • fx - 节点的固定 x-位置
  • fy - 节点的固定 y-位置

每次 tick 结束后,节点的 node.x 会被重新设置为 node.fx 并且 node.vx 会被设置为 0;同理 node.y 会被重新替换为 node.fy 并且 node.vy 被设置为 0;如果想要某个节点解除固定,则将 node.fx 和 node.fy 设置为 null 或者删除这两个属性。

下面是使用D3.js V5版本的实现代码:

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Force layout</title>
  <style>
    .link {
    
      stroke: #000;
      stroke-width: 1.5px;
    }
    .unfixedNode {
    
      cursor: move;
      fill: #ccc;
      stroke: #000;
      stroke-width: 1.5px;
    }
    .fixedNode {
    
      cursor: move;
      fill: red;
      stroke: #000;
      stroke-width: 1.5px;
    }
  </style>
</head>
<body>
  <script src="https://d3js.org/d3.v5.min.js"></script>
  <script>
  	// fixed是固定坐标的节点,unfixed是没有固定坐标的节点。
    var graph ={
    
      "nodes": [
        {
    "id": 0, "category": "unfixed"},
        {
    "id": 1, "category": "ufixed"},
        {
    "id": 2, "category": "unfixed"},
        {
    "id": 3, "category": "fixed","x": 467, "y": 314},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值