4

我正在尝试对 RISK 进行网络可视化。您可以在http://bl.ocks.org/4683850使用所需的代码查看它。

可视化工作,但它需要大量的体力劳动。我手动调整了 json 文件,使连接具有以下形状:

{
    "source": 1,
    "target": 0,
    "value": 5
} 

需要对 d3 代码做什么才能使连接由节点的名称确定?输入将是:

{
    "source": "WesternAustralia",
    "target": "NewGuinea",
    "value": 5
} 

每当我尝试时,我都会收到以下错误:

Uncaught TypeError: Cannot call method 'push' of undefined 
4

1 回答 1

11

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

https://github.com/mbostock/d3/wiki/Force-Layout#wiki-links

简而言之,链接数组可以包含 和 的索引sourcetarget它们被重新映射到来自 的对象nodes,或者它们包含对nodes自身对象的引用。您需要重新映射您的链接sourcetargetnodes.

假设您的sourcetarget属性使用上面第二个示例中所示的名称,您可以将以下代码段添加到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
      };
    });
于 2013-01-31T17:39:22.197 回答