【问题标题】:Can't visualize nodes in d3 force layout无法在 d3 强制布局中可视化节点
【发布时间】:2016-01-22 07:15:32
【问题描述】:

我正在尝试将我的可视化脚本更改为更像Modifying a Force Layout Example。因为我没有像a, b and c 这样的固定节点要添加,所以我读取了json file 来填充nodeslinks 数组。

d3.json("mock.json", function(error, json) {
    if (error)
        throw error;
    nodes = nodes.concat(json.nodes);
    links = links.concat(json.links);
    start();
});

nodeslinks 具有正确的大小,这意味着节点包含 26 nodes 和链接 37 links。现在我想使用linecircle 元素简单地可视化它们。

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();
}

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

【问题讨论】:

    标签: javascript json d3.js force-layout


    【解决方案1】:

    您的代码:

    d3.json("mock.json", function(error, json) {
    
        if (error)
            throw error;
        nodes = nodes.concat(json.nodes);
        links = links.concat(json.links);
        start();
    });
    

    必须是这样(原因否则force.nodes()最初将是空数组):

    d3.json("mock.json", function(error, json) {
    
        if (error)
            throw error;
        nodes = nodes.concat(json.nodes);
        links = links.concat(json.links);
    
        force.nodes(nodes); //else force.nodes() will be empty array set initially
        force.links(links)
    
        start();
    });
    

    下一步

    您的代码:

    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; });
    

    工作代码here

    希望这会有所帮助!

    【讨论】:

    • Jup,现在可以了,但为什么我必须使用force.nodes(nodes);?在示例中,它可以在没有它的情况下工作,尽管我想知道他是如何让部队知道节点和链接的。
    • 是的,因为nodes.concat(json.nodes) 将返回一个新对象,而force.nodes() 将保留旧对象..所以当您在代码中执行 force.nodes() 时,它会返回一个空数组,即你什么都看不到的原因。
    • 谢谢! :) 现在对我来说很有意义。 push() 在这种情况下对我不起作用,因为它只会将数组推入另一个数组。
    • 是的,推送后你需要像这样将其展平stackoverflow.com/questions/10865025/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2014-08-01
    • 2015-05-01
    • 2016-08-15
    • 2015-09-24
    相关资源
    最近更新 更多