Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t在d3部队布局中可视化节点_Javascript_Json_D3.js_Force Layout - Fatal编程技术网

Javascript Can';t在d3部队布局中可视化节点

Javascript Can';t在d3部队布局中可视化节点,javascript,json,d3.js,force-layout,Javascript,Json,D3.js,Force Layout,我正在尝试将我的可视化脚本更改为更像。因为我没有像a、b和c这样的固定节点来添加,所以我读取了json文件来填充节点和链接数组 d3.json("mock.json", function(error, json) { if (error) throw error; nodes = nodes.concat(json.nodes); links = links.concat(json.links); start(); }); 节点和链接的大小合适,

我正在尝试将我的可视化脚本更改为更像。因为我没有像
a、b和c这样的固定节点来添加,所以我读取了
json文件
来填充
节点
链接
数组

d3.json("mock.json", function(error, json) {
    if (error)
        throw error;
    nodes = nodes.concat(json.nodes);
    links = links.concat(json.links);
    start();
});
节点
链接
的大小合适,这意味着节点包含
26个节点
37个链接
。现在我想简单地使用
line
circle
元素将它们可视化

function start() {
    link = link.data(force.links(), function(d) { return d.source.id + "-" + d.target.id; });
    link.enter().append("line").attr("class", "link");
    link.exit().remove();

    node = node.data(force.nodes(), function(d) { return d.id;});
    node.enter().append("circle").attr("class", "node").attr("r", 8);
    node.exit().remove();
    force.start();
}

这与示例非常相似,我真的不明白为什么这不起作用。我提供了模拟。是否因为我使用了
concat()
而不是
push()
而出现问题,或者是否还有其他问题?

您的代码:

d3.json("mock.json", function(error, json) {

    if (error)
        throw error;
    nodes = nodes.concat(json.nodes);
    links = links.concat(json.links);
    start();
});
必须是这样的(reasonelse
force.nodes()
最初将设置为空数组):

下一步

您的代码:

link = link.data(force.links(), function(d) { return d.source.id + "-" + d.target.id; });
更正代码:

link = link.data(force.links(), function(d) { return d.source + "-" + d.target; });
工作代码


希望这有帮助

Jup现在可以工作了,但是为什么我必须使用
force.nodes(nodes)?在这个例子中,它在没有它的情况下可以工作,尽管我想知道他是如何让force知道节点和链接的。是的,因为
nodes.concat(json.nodes)
将返回一个新对象,而
force.nodes()
将保留旧对象。因此,当您执行force.nodes()时在您的代码中,它返回一个空数组,这就是您没有看到任何内容的原因。谢谢!:)现在我觉得这很有道理
push()
在这种情况下对我不起作用,因为它只会将阵列推到另一个阵列中。是的,推后需要像这样将其展平
link = link.data(force.links(), function(d) { return d.source + "-" + d.target; });