控制行长 d3.js

2024-02-17

我使用以下代码生成一个被其他圆圈包围的圆圈,这些圆圈都通过以下方式连接到主圆圈<line>元素。我试图让它们与圆的间距不均匀,但无论我尝试什么,我都会遇到某种混乱。代码如下:

var width = 500,
    height = 500;
var force = d3.layout.force()
    .size([width, height])
    .charge(-400)
    .linkDistance(190)
    .on("tick", tick);
var drag = force.drag()
    .on("dragstart", dragstart);
var svg = d3.select("#orb").append("svg")
    .attr("width", width)
    .attr("height", height)
    .attr("class", "mainsvg");
var link = svg.selectAll(".link"),
    node = svg.selectAll(".node");


d3.json("graph.json", function(error, graph) {
  if (error) throw error;

  force
      .nodes(graph.nodes)
      .links(graph.links)
      .start();

  link = link.data(graph.links)
      .enter().append("line")
      .attr("class", "link");



  node = node.data(graph.nodes)
      .enter().append("a")      
      .attr("href", "3");

    node.append("g")
      .attr("class", "node");



    node.append("circle")
      .attr("class", "circle")
      .attr("r", function(d) { return d.r })
      .attr("fill", function(d) { return d.color })
      .attr("stroke", function(d){ return d.color })
      .on("dblclick", dblclick);

    node.append("text")
      .attr("class", "text")
      .attr("fill", "white")
      .attr("stroke", "none")
      .attr("x", function(d) { return d.x; })
      .attr("y", function(d) { return d.y; })
      .text( function (d) { return d.name; });


});

function tick() {
  link.attr("x1", function(d) { return d.source.x; })
      .attr("y1", function(d) { return d.source.y; })
      .attr("x2", function(d) { return d.target.x; })
      .attr("y2", function(d) { return d.target.y; });

  svg.selectAll(".circle").attr("cx", function(d) { return d.x; })
      .attr("cy", function(d) { return d.y; });
  svg.selectAll(".text").attr("x", function(d) { return d.x+d.xoffs; })
      .attr("y", function(d) { return d.y+d.yoffs; });
}

我尝试过控制 x1/y1 和 x2/y2<line>元素,但如果我移动线条,圆圈保持不变。有没有办法说,取消相等的链接距离并为每个圆单独设置它?


有多种方法可以实现您想要的目标。但最重要的是记住这一点linkDistance接受一个函数。

例如,在此代码片段中,我在数据数组中设置链接的距离:

var links = [{
    source: 1,
    target: 0,
    distance: 50
}, {
    source: 2,
    target: 0,
    distance: 20
}, {
    source: 3,
    target: 0,
    distance: 150
}, {
    source: 4,
    target: 0,
    distance: 80
}, {
    source: 5,
    target: 0,
    distance: 40
}]

并在力量中使用它:

.linkDistance(d=>d.distance)

检查片段:

var nodes = [{
        name: "a"
    }, {
        name: "b"
    }, {
        name: "c"
    }, {
        name: "d"
    }, {
        name: "e"
    }, {
        name: "f"
    }];

    var links = [{
        source: 1,
        target: 0,
        distance: 50
    }, {
        source: 2,
        target: 0,
        distance: 20
    }, {
        source: 3,
        target: 0,
        distance: 150
    }, {
        source: 4,
        target: 0,
        distance: 80
    }, {
        source: 5,
        target: 0,
        distance: 40
    }]

    var width = 400
    height = 300;

    var force = d3.layout.force()
        .nodes(nodes)
        .links(links)
        .size([width, height])
        .linkDistance(d => d.distance)
        .charge(-1000)
        .on("tick", tick)
        .start();

    var svg = d3.select("body").append("svg")
        .attr("width", width)
        .attr("height", height);

    var link = svg.selectAll(".link")
        .data(force.links())
        .enter().append("line")
        .attr("stroke", "black")
        .attr("class", "link");

    var node = svg.selectAll(".node")
        .data(force.nodes())
        .enter().append("g")
        .attr("class", "node")
        .call(force.drag);

    node.append("circle")
        .attr("r", (d,i) => i ? 10 : 16)
        .style("fill", (d,i) => i ? "teal" : "brown");

    function tick() {
        link.attr("x1", function(d) {
                return d.source.x;
            })
            .attr("y1", function(d) {
                return d.source.y;
            })
            .attr("x2", function(d) {
                return d.target.x;
            })
            .attr("y2", function(d) {
                return d.target.y;
            });

        node.attr("transform", function(d) {
            return "translate(" + d.x + "," + d.y + ")";
        });
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

控制行长 d3.js 的相关文章

随机推荐

  • Android:以编程方式检测设备是否连接了硬件触摸屏

    我需要编写一个脚本来检测物理触摸屏在启动时是否连接到我的 Android 设备 我试图列出文件夹的内容 dev input通过 adb 我获得以下输出 root q88 dev input ls event0 event1 event2 e
  • 如何使用 JavaScript 以最佳方式渲染大量 DOM 元素?

    在网页上 我有一个相当大的项目列表 例如 产品卡 每个项目都包含图像和文本 大约有 1000 个 我想在客户端上过滤此列表 仅应显示那些未过滤掉的项目 但存在渲染性能问题 我应用了一个非常窄的过滤器 只剩下 10 20 个项目 然后取消它
  • 摆脱天文学中的单位

    我有一个大 262615 3 值的数组 所有值都附加有单位 具体源于这个函数 def coordconvert data from astropy coordinates import SkyCoord from astropy impor
  • 如何在 iOS 上以编程方式将视图旋转 180 度?

    如何在我的 iPhone 应用程序中以编程方式将视图旋转 180 度 由于 CGAffineTransform Rotate 使用弧度作为测量单位 并且 180 度与 PI 相同 因此您可以简单地执行以下操作 而不是其他答案中提供的数学 v
  • 在 R 中导入 csv 文件/从整数转换为双精度时出现问题

    今天我终于决定开始攀登 R 陡峭的学习曲线 我花了几个小时 成功导入了数据集并做了一些其他基本的事情 但我在数据类型方面遇到了问题 包含小数的列作为整数导入 转换为双精度会更改值 在尝试获取一个小的 csv 文件放在这里作为示例时 我发现仅
  • 经典 ASP 在 IIS7 中始终返回代码 200

    我在 IIS7 中启用了跟踪 我在 IIS 管理工具的 ASP 选项卡中将这些属性设置为 true 应用程序允许客户端调试 应用程序允许调试 错误到NTLog 脚本错误发送到浏览器 为了测试它 我编写了一个小型的经典 ASP 测试页 其中我
  • EF:选择子类的所有实体(继承)

    我正在使用数据库优先方法和 DbContext 我的数据模型中有几个继承结构 TPH 但是DbContext只为基类创建一个DbSet 而没有为子类创建一个DbSet 我应该如何检索指定子类的所有实体 我无法根据映射条件编写查询 因为我必须
  • Codeigniter 和 RestServer。如何上传图片?

    我正在 Codeigniter 中使用 Phils RestServer 请参阅链接 编写 API 我需要一种通过 API 上传图像的方法 我怎样才能做到这一点 是否就像使用正确的标头 使用什么标头 发出 POST 请求一样简单 https
  • 如何获得 DIV 的“自动”高度

    所以当我用 jquery 在 div 上设置固定高度时 就像 div height 200 的价值 div height 始终为 200 即使该 div 的内容超过该高度 我使用overflow hidden 我怎样才能获得 DIV 的真实
  • ASP.NET MVC 视图引擎性能

    我正在使用 asp net mvc 最终版本开发高负载解决方案 最近我们的团队注意到 服务器响应客户端的大部分时间都用于页面渲染 简单的时间安排如下所示 Page start 1 8608363s Render module 1140 Mo
  • 突破溢出:隐藏

    我们目前正在努力尝试突破隐藏溢出的 div 我们有一个下拉菜单 当用户键入时 在搜索字段中键入 c 即可查看 该菜单中会填充建议 该下拉菜单当前隐藏在菜单栏后面 因为它具有 溢出隐藏 如果我们移除top 100 并将位置设置为fixed 但
  • 我正在使用什么 SDL 和 OpenGL 版本和实现

    我下载了 SDL 1 2 14 在 Windows 7 上 我安装了 Mobility Radeon X1800 驱动程序 我正在使用 Microsoft Visual C 2010 Express 我在 VC 目录 中添加了SDL包含和库
  • StoreKit 返回所有产品 ID

    这个问题与我在这里找到的其他问题有点不同 我的 In App StoreKit 正在运行 我可以成功列出我的商店中的产品 我已经浏览了苹果文档 但从未看到我的问题得到解决 我可能错过了 我的客户 非营利组织 希望能够通过他们的应用程序接受捐
  • 在 Google Cloud 端点中实施缓存控制

    无论参数列表如何 我的端点方法都会为每次调用生成不同的响应 我经常看到我的客户端使用相同的参数列表调用端点 并且前端实例返回缓存的响应 In the 官方文档 https cloud google com appengine docs ja
  • 通过allow_url_include=0 在服务器配置中禁用包装器

    我正在尝试使用检索页面内容AJAX称呼 我在页面包装器中有一系列链接 当我点击一个链接时 它会加载一个 JavaScript 函数 该函数从php脚本 在这种情况下 我正在开发我的localhost 但在生产中 脚本将位于与执行以下操作的文
  • Keras 教程错误:NameError:名称“层”未定义

    我正在尝试跟随this https www tensorflow org guide kerasKeras教程 但是使用命令编译时遇到以下错误python3 test py Traceback most recent call last F
  • 如何获取任意位置的当前时间

    我必须上传图像 并且必须发送上传图像时的日期和时间 我正在获取上传图像的设备的纬度和经度 现在我想获取该图像的时间和日期上传图像时的位置 我不想从设备中获取日期和时间 是否可以借助该地点的纬度和经度来获取日期和时间 您可以通过 GeoNam
  • MEX 文件可以使用 -fsanitize=address 运行吗?

    我有一个用 g 正常编译的 MEX 文件 我最近将其编译更改为使用 clang 并包含 fsanitize address进入两个LDFLAGS and CFLAGS 注意 此项目不存在 CXX 标志 然而 尽管如此 一旦我进入 MATLA
  • 在 docker 中使用 vaadin 运行 Spring boot 应用程序时初始化 Tomcat 失败

    我是一名业余爱好者 最近从 heroku 切换到 render com 我想把我的 SringBoot 应用程序放在那里 但它要求我在我没有经验的 docker 环境中运行它 我设法为其编写 Dockerfile 并从 jar 文件运行它
  • 控制行长 d3.js

    我使用以下代码生成一个被其他圆圈包围的圆圈 这些圆圈都通过以下方式连接到主圆圈