Javascript d3力定向网络的json表示

Javascript d3力定向网络的json表示,javascript,d3.js,force-layout,Javascript,D3.js,Force Layout,我正试图使风险的网络可视化。您可以在查看时使用所需的代码 视觉效果很好,但需要大量的体力劳动。我手动修改了json文件,使连接具有以下形状: { "source": 1, "target": 0, "value": 5 } 我们需要对d3代码做些什么,以使连接由节点的名称决定?然后,输入将是: { "source": "WesternAustralia", "target": "NewGuinea", "value": 5 } 无论何时尝试

我正试图使风险的网络可视化。您可以在查看时使用所需的代码

视觉效果很好,但需要大量的体力劳动。我手动修改了json文件,使连接具有以下形状:

{
    "source": 1,
    "target": 0,
    "value": 5
} 
我们需要对d3代码做些什么,以使连接由节点的名称决定?然后,输入将是:

{
    "source": "WesternAustralia",
    "target": "NewGuinea",
    "value": 5
} 
无论何时尝试,都会出现以下错误:

Uncaught TypeError: Cannot call method 'push' of undefined 

D3文档解释了链接的工作原理:

简言之,链接数组可以包含
目标
的索引,这些索引可以重新映射到
节点
中的对象,也可以包含对
节点
本身中对象的引用。您需要将链接的
目标
重新映射到
节点
中的对象

假设您的
目标
属性使用了上面第二个示例中所示的名称,您可以将以下代码段添加到
d3.json
回调的开头以进行重新映射:

    var nodeMap = {};
    graph.nodes.forEach(function(x) { nodeMap[x.name] = x; });
    graph.links = graph.links.map(function(x) {
      return {
        source: nodeMap[x.source],
        target: nodeMap[x.target],
        value: x.value
      };
    });

很好的解决方案!这帮了我的忙。