【问题标题】:JavaScript error "Uncaught TypeError: Cannot call method 'push' of undefined" D3.jsJavaScript 错误“未捕获的 TypeError:无法调用未定义的方法‘push’”D3.js
【发布时间】:2013-10-03 12:39:24
【问题描述】:

我正在使用 R 包 d3Network 来生成 D3.js 强制布局图。 d3Network 生成的代码给了我一个“Uncaught TypeError: Cannot read property 'weight' of undefined”错误。有谁知道这可能是什么原因造成的?

我正在使用示例(但使用不同的数据集):

http://bl.ocks.org/mbostock/4062045

http://christophergandrud.github.io/d3Network/(d3ForceDirected 部分)

构建图的代码是:

var force = d3.layout.force()
.nodes(d3.values(nodes)) 
.links(links) 
.size([width, height]) 
.linkDistance(50) 
.charge(-120) 
.on("tick", tick) 
.start(); 

链接:

var link = svg.selectAll(".link")
.data(force.links())
.enter().append("line")
.attr("class", "link")
.style("stroke-width", function(d) { return Math.sqrt(d.value); });

数据是:

var links = [ { "source" : 1, "target" : 11, "value" : 2,}, 
            { "source" : 1, "target" : 21, "value" : 2 }, 
            { "source" : 1, "target" : 20, "value" : 1 }, 
            { "source" : 1, "target" : 19, "value" : 2 }, 
            { "source" : 2, "target" : 16, "value" : 1 }, 
            { "source" : 2, "target" : 14, "value" : 1 }, 
            { "source" : 2, "target" : 13, "value" : 1 }, 
            { "source" : 2, "target" : 15, "value" : 1 }, 
            { "source" : 2, "target" : 18, "value" : 1 }, 
            { "source" : 3, "target" : 14, "value" : 1 }, 
            { "source" : 3, "target" : 17, "value" : 1 }, 
            { "source" : 3, "target" : 21, "value" : 1 }, 
            { "source" : 3, "target" : 19, "value" : 1 }, 
            { "source" : 5, "target" : 13, "value" : 1 },
            { "source" : 5, "target" : 12, "value" : 1 },
            { "source" : 5, "target" : 10, "value" : 1 }, 
            { "source" : 5, "target" : 19, "value" : 1 }, 
            { "source" : 5, "target" : 22, "value" : 1 }, 
            { "source" : 6, "target" : 21, "value" : 1 }, 
            { "source" : 6, "target" : 20, "value" : 1 }, 
            { "source" : 7, "target" : 11, "value" : 1 }, 
            { "source" : 7, "target" : 19, "value" : 1 }, 
            { "source" : 8, "target" : 15, "value" : 1 }, 
            { "source" : 9, "target" : 17, "value" : 1 }, 
            { "source" : 9, "target" : 22, "value" : 1 } ] ; 
 var nodes = [{ "name" : "c6_Sports", "group" : 1 }, 
            { "name" : "c8_Talk", "group" : 1 }, 
            { "name" : "c10_TV", "group" : 1 }, 
            { "name" : "c3_Movies", "group" : 1 }, 
            { "name" : "c9_Together", "group" : 1 }, 
            { "name" : "c2_Games", "group" : 1 }, 
            { "name" : "c1_ConsoleGames", "group" : 1 }, 
            { "name" : "c5_Outside", "group" : 1 }, 
            { "name" : "c4_Music", "group" : 1 },
            { "name" : "Joe", "group" : 1 }, 
            { "name" : "Fiona", "group" : 1 }, 
            { "name" : "Jill", "group" : 1 }, 
            { "name" : "Bob", "group" : 1 }, 
            { "name" : "Bertha", "group" : 1 }, 
            { "name" : "Jimmy", "group" : 1 }, 
            { "name" : "Amanda", "group" : 1 }, 
            { "name" : "Dmitry", "group" : 1 }, 
            { "name" : "Scott", "group" : 1 }, 
            { "name" : "Patricia", "group" : 1 }, 
            { "name" : "Mike", "group" : 1 }, 
            { "name" : "Lois", "group" : 1 }, 
            { "name" : "Tim", "group" : 1 } ] ; 

【问题讨论】:

  • 看起来某处有一个错误。 links 中“源”和“目标”中的数字应从 0 开始。
  • @LarsKotthoff,谢谢。这可能是因为 R 从 1 开始计数,而世界上其他所有事物都从 0 开始计数。我也会对此进行检查。
  • 我使用我的 Force Directed Graph 模板复制了您的数据。 vida.io/documents/QG8LdCQEJesi2scQC。数据没问题。这可能是 tick() 函数中的问题。检查 line.attr("d", ...) 计算。
  • @LarsKotthoff:修复了它。你想把它作为一个答案让我接受吗?

标签: javascript r d3.js


【解决方案1】:

作为“源”和“目标”links 给出的数字是nodes 数组的索引,应该从 0 开始。你的数字从 1 开始,因此最高数字不存在并给你这个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2012-08-27
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多