d3.js: невозможно прочитать свойство «вес» неопределенного при ручном определении узлов и ссылок для принудительного макета

Я попытался одновременно установить узлы и ссылки следующим образом:

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(connections) график рендерится (выступает кучей точек, разбросанных повсюду...) Как мне заставить соединения/ссылки взаимодействовать с d3?

Я читал документы, и, по-видимому, источник и цель должны быть ИНДЕКСАМИ узлов в массиве узлов. Есть ли способ это изменить? Итак, я могу использовать имя узла, а не его индекс в массиве?


person NullVoxPopuli    schedule 06.07.2012    source источник


Ответы (6)


Компоновка с принудительным направлением использует веса ребер для расчета компоновки. Попробуйте добавить фиктивный "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), чтобы использовать любое свойство/тип.

person ZachB    schedule 07.07.2012

Я сталкивался с той же проблемой раньше, это связано с нулевыми значениями в источнике/цели ссылок. распечатайте информацию об узлах и ссылках, которая может помочь в отладке

person air_bob    schedule 26.09.2013

В дополнение к ответам, в которых упоминается нуль в источнике/цели ссылок, причиной этого может быть назначение источника/цели вне допустимого диапазона. Например. у вас есть 10 узлов, и вы назначаете целью 11-й индексированный узел.

person elachell    schedule 15.03.2014
comment
у меня есть эта проблема, как мне не выдавать ошибку, если я не могу найти узел в своих данных? - person thatOneGuy; 17.09.2015
comment
как сказал @air_bob, вы можете распечатать, если какие-либо назначения ссылок превышают количество узлов - person elachell; 24.11.2015
comment
Важное предостережение: индексация JavaScript равна 0. Поэтому я считаю, что правильный комментарий: у вас есть 10 узлов и вы назначаете цель (или источник) 10-м индексированным узлом. - person JHowIX; 07.06.2016


Я думаю, что у вас могут быть нулевые значения в вашем источнике и цели. У меня тоже была эта ошибка, и я исправил ее, отфильтровав нулевые значения.

person synaptikon    schedule 12.07.2013

У меня эта проблема всплывала несколькими способами. Совсем недавно у меня был следующий список преимуществ:

{Source: 0; Target: 1}

вместо:

{source: 0, target: 1}
person Ells    schedule 21.01.2014