最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

r - JavaScript error "Uncaught TypeError: Cannot call method 'push' of undefined" D3.js - Stac

programmeradmin1浏览0评论

I'm using the R package d3Network to produce D3.js Forced Layout graphs. The code that d3Network produces gives me a "Uncaught TypeError: Cannot read property 'weight' of undefined " error. Does anyone know what might be causing this?

I'm using the examples at (But with a different set of data):

/ (d3ForceDirected section)

The code that builds the graph is:

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

Links:

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

The data is:

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

I'm using the R package d3Network to produce D3.js Forced Layout graphs. The code that d3Network produces gives me a "Uncaught TypeError: Cannot read property 'weight' of undefined " error. Does anyone know what might be causing this?

I'm using the examples at (But with a different set of data):

http://bl.ocks/mbostock/4062045

http://christophergandrud.github.io/d3Network/ (d3ForceDirected section)

The code that builds the graph is:

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

Links:

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

The data is:

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 } ] ; 
Share Improve this question asked Oct 3, 2013 at 12:39 RedRavenRedRaven 7352 gold badges18 silver badges34 bronze badges 4
  • Looks like there's an off-by-one error somewhere. The numbers in "source" and "target" in links should start at 0. – Lars Kotthoff Commented Oct 3, 2013 at 12:48
  • @LarsKotthoff, Thanks. This is likely because R starts counting with 1 and everything else in the world starts counting with 0. I'll check on this as well. – RedRaven Commented Oct 3, 2013 at 13:17
  • I replicated your data with my Force Directed Graph template. vida.io/documents/QG8LdCQEJesi2scQC. The data is ok. It could be a problem in tick() function. Check line.attr("d", ...) calculation. – Phuoc Do Commented Oct 3, 2013 at 22:14
  • @LarsKotthoff: that fixed it. Do you want to make it an answer so I can accept? – RedRaven Commented Oct 3, 2013 at 23:14
Add a ment  | 

1 Answer 1

Reset to default 6

The numbers given as "source" and "target" links are indexes into the nodes array and should start from 0. Yours start from 1 and hence the highest number doesn't exist and gives you this error.

发布评论

评论列表(0)

  1. 暂无评论