我试图在同一时间这样设定两个节点和链接:
var force = d3.layout.force()
.size([w, h])
.nodes(nodes)
.links(connections)
.start();
nodes = [{"name":"data_base_id", "kind":"subgenre"},...]
connections = [{"source":"name_of_node", "target":"name_of_other_node"},...]
我有可能没有连接的数据,所以有必要定义的节点,使所有节点得到呈现。和定义风格是很容易的。但我得到这个错误;
Cannot read property 'weight' of undefined
当我注释掉.links(连接)的图形渲染(只是一堆散落各处的点...)我如何获得的连接/链路与D3进行合作?
我正在读的文档,显然,源和目标必须是节点阵列中的节点索引。反正是有改变这种状况?所以,我可以用一个节点,而不是它在阵列中的索引的名称?
该力指向布局使用的边权重来计算的布局。尝试添加一个虚拟"weight":1
所有连接的设备。
初始化链接的代码如下所示:
links.forEach(function(d) {
if (typeof d.source == "number") { d.source = nodes[d.source]; }
if (typeof d.target == "number") { d.target = nodes[d.target]; }
});
想必你可以调整的是(在D3源)使用任何属性/类型。
我以前遇到同样的问题,这是由于存在链接源/目标空值。打印出的节点和链接的信息可能有助于调试
除了答案提的链接的源/目标空,这样做的原因可能是超出范围的源/目标的分配。例如。你有10个节点和分配目标是第11个索引节点。
由于其上方指空源或目标值的答案!
我一直在测试了从http://bl.ocks.org/mbostock/4062045图,并发现我引用的数据丢失节点。
这可以帮助别人调试这个问题:
d3.json("my-buggy-data.json", function(error, graph) {
// Find blank links, which give the error
// "Uncaught TypeError: Cannot read property 'weight' of undefined"
graph.links.forEach(function(link, index, list) {
if (typeof graph.nodes[link.source] === 'undefined') {
console.log('undefined source', link);
}
if (typeof graph.nodes[link.target] === 'undefined') {
console.log('undefined target', link);
}
});
force
.nodes(graph.nodes)
.links(graph.links)
.start();
我想你可能在你的源和目标空值。我有这个错误也和过滤掉空值固定它。
我有这个问题在许多方面弹出。最近,我有我的优势名单如下:
{Source: 0; Target: 1}
代替:
{source: 0, target: 1}