graphics graph d3.js force-layout

graphics - d3.js: "No se puede leer la propiedad ''peso'' de indefinido" cuando se definen manualmente los nodos y los enlaces para el diseƱo de fuerza



force-layout (6)

Intenté configurar ambos nodos y enlaces al mismo tiempo de esta manera:

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"},...]

Tengo datos que pueden no tener conexiones, por lo que es necesario definir los nodos para que todos los nodos se representen. Y definir los géneros es bastante fácil. pero me sale este error;

Cannot read property ''weight'' of undefined

Y cuando comento .links (conexiones), el gráfico muestra (sobresale un montón de puntos dispersos a lo largo de ...) ¿Cómo obtengo las conexiones / enlaces para cooperar con d3?

Estaba leyendo los documentos y, aparentemente, el origen y el destino deben ser ÍNDICES de los nodos en la matriz de nodos. ¿Hay alguna forma de cambiar eso? Entonces, ¿puedo usar el nombre de un nodo en lugar del índice que tiene en una matriz?


Además de las respuestas que mencionan el nulo en el origen / destino de los enlaces, la razón de esto podría ser la asignación de un origen / destino fuera de rango. Por ejemplo, tiene 10 nodos y asigna el objetivo como el 11º nodo indexado.


Creo que podría tener valores nulos en su origen y destino. También tuve este error y lo arreglé filtrando los valores nulos.


El diseño dirigido por fuerza utiliza pesos de borde para calcular el diseño. Intente agregar un "weight":1 ficticio "weight":1 a todas sus conexiones.

El código que inicializa los enlaces se ve así:

links.forEach(function(d) { if (typeof d.source == "number") { d.source = nodes[d.source]; } if (typeof d.target == "number") { d.target = nodes[d.target]; } });

Es de suponer que podría ajustar eso (en la fuente d3) para usar cualquier propiedad / tipo.


Gracias a las respuestas anteriores que se refieren a valores de origen o destino nulos!

He estado probando el gráfico de http://bl.ocks.org/mbostock/4062045 , y encontré que mis datos hacían referencia a un nodo faltante.

Esto puede ayudar a otros a depurar este problema:

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();


He tenido este problema emergente de varias maneras. Más recientemente, tuve mi lista de borde de la siguiente manera:

{Source: 0; Target: 1}

en lugar de:

{source: 0, target: 1}


Me he encontrado con el mismo problema antes, se debe a que hay valores nulos en el origen / destino de los enlaces. imprimir nodos e información de enlaces podría ayudar a depurar