Я новичок в d3js, и у меня возникли проблемы с отображением файла csv на ссылки макета силы.Почему моя функция d3 map возвращает неопределенный атрибут источника?
это мой CSV-файл:
node,edges,centrality_degree
1,"[(1, 2), (1, 3), (1, 4), (1, 5)]",1.0
2,"[(2, 1), (2, 3), (2, 4), (2, 5)]",1.0
3,"[(3, 1), (3, 2), (3, 4), (3, 5)]",1.0
4,"[(4, 1), (4, 2), (4, 3), (4, 5)]",1.0
5,"[(5, 1), (5, 2), (5, 3), (5, 4)]",1.0
Я хочу, чтобы установить значение ребер атрибута звеньев d3.layout.force(), однако при отображении значения, я получаю сообщение об ошибке :
Uncaught TypeError: Cannot read property 'weight' of undefined
я не знаю, и если это правильно возвращать массив с кучей объектов, это то, что я получаю на консоли. 5 массивов с 4 объектами каждый, каждый объект с его атрибутом источника и цели. Все атрибуты правильны, за исключением массива 5. Я получаю неопределенное значение для первого исходного значения. Он должен был быть 5.
Вот мой код:
var force = d3.layout.force()
.size([w, h]);
d3.csv("{{ g }}", function(d) {
var nodes = d3.values(d.map(function(d){ return +d.node; }));
var links_list = d.map(function(d) {
list_array = JSON.parse(d.edges.replace(/\(/g,"[").replace(/\)/g,"]"));
var i, len = list_array.length;
links = [];
for (i=0; i<len; i++) {
links.push({source: list_array[i][0] ,target: list_array[i][1] });
}
console.log(links);
#console result:
#[Object, Object, Object, Object]
#[Object, Object, Object, Object]
#[Object, Object, Object, Object]
#[Object, Object, Object, Object]
#expanding one array:
#0: Object
#1: Object
#2: Object
#3: Object
#[Object, Object, Object, Object]
#expanding the array[5][0] object:
#0: Object
#source: undefined
#target: 2
#__proto__: Object
});
force
.nodes(nodes)
.links(links)
.start();
...
});
Что я делаю не так, и почему я получаю эту ошибку?
Я ценю вашу помощь.
Номера, которые вы указываете как источник и цель для ссылок, должны быть индексами в массиве узлов, а не идентификаторами узлов. Они начинаются с 0, а не с 1. Если вы хотите использовать идентификаторы, см. Https://stackoverflow.com/questions/23986466/d3-force-layout-linking-nodes-by-name-instead-of-index –
@LarsKotthoff, это индексы для массива. Число 0 является ссылкой для первого элемента массива на консоли. –
Цифры в ваших данных нет - они начинаются с 1 и идут до 5 для 5 узлов. –