javascript - 如何在 D3.js 强制布局中链接来自 json 数据的额外属性?

标签 javascript json graph d3.js force-layout

我遵循了 Mike Bostock 中的各种示例创建一个可折叠的力布局,在节点处具有定向路径和图像(与 this other question 相关)。

现在,我想将一些额外信息链接到某些节点(如果它们包含任何额外信息)(由 json 字符串中的数据构成)。

json 字符串如下所示:

 {
   "name": "Somename",
   "text": "Some text",
   "extradata": [
            {
              "type": "sometype",
              "icon": "someicon.png"
            },
            {
               "type": "sometype02",
              "icon":  "someicon.png"
            }
   ],
   "children": [
    {
        "name": "Somename",
        "text": "Some text",
        "extradata": [
            {
              "type": "sometype",
              "icon": "someicon.png"
            },
        ]
    },
    {
        "name": "Somename",
        "text": "Some text",
        "extradata": [
            {
              "type": "sometype",
              "icon": "someicon.png"
            },
            { .... },
            { .... },
            { .... },
            ....
        ],
        "children": [
        {
            ....
        }
    },
    ........

简而言之,我想显示链接到此 extradata 属性的每个节点的 extradata[] 数组的一些值。最终结果如下图所示,其中蓝色圆圈代表额外数据的内容(例如 sometypesometype02)。

enter image description here

我无法理解如何解析 json 字符串以获取这些值,以及如何创建指向它们所属节点的链接。

最佳答案

d3 的美妙之处在于 Javascript 对象本质上链接到代表它们的 DOM 对象。您甚至可能会说数据驱动文档。

大概你有这样的东西:

var node = svg.selectAll(".node")
    .data(data.nodes)
    .enter().append("circle")
    [...]

也许您想根据 JSON 中的第一个 datatype 属性为每个节点着色:

var node = svg.selectAll(".node")
    .data(data.nodes)
    .enter()
    .append("circle")
    .style("fill", function(d) { 
        return d.extradata[0].type === "sometype" ? "#FF0000" : "#0000FF";
    })

重点是,您已经可以访问传递给函数的 d 变量中的对象。

这是一个example使用数据属性中的 FDL 和着色节点。还包括工具提示。

关于javascript - 如何在 D3.js 强制布局中链接来自 json 数据的额外属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481570/

相关文章:

javascript - 让一个元素对另一个元素的状态变化使用react

javascript - 外部 javascript 不适用于 spring

javascript - 当 js 显示和隐藏效果到位时,让 div 显示不同的颜色

javascript - 使用 Express 和 Node 将 json 文件发送到 pug 模板

python - 如何在极坐标图中正确显示颜色条(半圆的等高线图)?

javascript - 从 JavaScript Web Animations API 中读取样式信息,中间状态

javascript - 更改 json 对象中的数组条目

java - 如何使用 Spring RestController 返回 FileSystemResource 或 json?

Python:使用 RDFLIB 绘制芝麻数据库图形

algorithm - 图 - 顶点权重的最短路径