【问题标题】:D3.js: Loading multiple networks from JSON files w/ Force LayoutD3.js:使用强制布局从 JSON 文件加载多个网络
【发布时间】:2014-01-03 08:37:55
【问题描述】:

我有几个存储在单独 JSON 文件中的网络(节点 + 链接)。我正在将它们加载到 D3.js 中的强制布局中,并且它们单独加载和布局都很好。但是,我想添加在同一页面上加载任何文件(一次一个)的功能,并在从 JSON 文件加载新网络时重新开始强制布局。

从 JSON 文件加载新网络时,如何重新启动强制布局?我找到的最接近的是http://bl.ocks.org/mbostock/1093130,但这仅适用于单个文件。

奇怪的相关错误?

我还注意到 Force Layout 的一些特殊之处。如果我每 1 秒在 JSON 文件之间快速切换一次,Force Layout 会保持正确布局。如果我在切换之前等待超过几秒钟,那么 Force Layout 似乎会确定第二个网络的最终布局,然后它会从那时起停止布局其余网络。

有关上述内容的更多详细信息:我意识到当 Force Layout 失败时出现意外错误:

Uncaught TypeError: Cannot call method 'call' of undefined

错误似乎是 D3.js 内部的,如下几行:

d3_selectionPrototype.each = function(callback) {
    return d3_selection_each(this, function(node, i, j) {
        callback.call(node, node.__data__, i, j);
    });
};

【问题讨论】:

    标签: javascript json d3.js social-networking force-layout


    【解决方案1】:

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

    # force.开始()

    开始模拟;在分配节点和链接之后,必须在首次创建布局时调用此方法。此外,每当节点或链接发生变化时,都应该再次调用它。 [...]

    【讨论】:

    • 每次从 JSON 文件加载数据后,我都会执行 force.nodes(graph.nodes).links(graph.links).start();(其中 graph 是网络数据)。它似乎仍然被锁定在某些东西上。
    • 哦,好的。如果每次加载新数据时都初始化一个新的d3.layout.force() 是否正常工作?
    • 那里也没有骰子。虽然我刚刚意识到每次强制布局失败时都会引发错误:Uncaught TypeError: Cannot call method 'call' of undefined。我会在原帖中将详细信息放在上面。
    • 开发工具应该为您提供此错误的堆栈跟踪以及行号。它是由您的代码行抛出的,还是由 D3.js 内部抛出的?
    • 仅供参考,您可以扩展错误以获取堆栈跟踪,它应该指向触发错误的代码行。此外,假设使用 chrome 开发工具,您可以将停止标志按钮切换为紫色,以便它在出错时暂停运行时并让您四处闲逛。
    猜你喜欢
    • 2013-08-14
    • 2012-10-21
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多