2013-05-15 18 views
14

Sto usando il layout della forza per rappresentare una rete non pesata diretta. La mia ispirazione viene dal seguente esempio: http://bl.ocks.org/mbostock/1153292Il layout di forza di d3.js consente linkDistance dinamico?

enter image description here

mio problema è che nel mio caso non molto di più collegamenti tra i nodi e ho la sensazione che dare un linkDistance fisso, che è sempre lo stesso, è un vincolo molto grande per il mio layout.

È possibile impostare uno linkDistance dinamico, in modo che un collegamento aumenti di lunghezza se è utile ridurre l'attraversamento del collegamento all'interno del grafico?

risposta

14

Da the documentation:

force.linkDistance ([distanza])

Se si specifica distanza, imposta la distanza tra i nodi di destinazione collegati al valore specificato. Se la distanza non viene specificata, restituisce la distanza attuale del collegamento del layout, che viene impostata automaticamente su 20. Se la distanza è una costante, tutti i collegamenti hanno la stessa distanza. Altrimenti, se la distanza è una funzione, la funzione viene valutata per ciascun collegamento (nell'ordine), passando il collegamento e il suo indice, con il contesto come formato della forza; il valore di ritorno della funzione viene quindi utilizzato per impostare la distanza di ciascun collegamento. La funzione viene valutata ogni volta che inizia il layout. In genere, la distanza è specificata in pixel; tuttavia, le unità sono arbitrarie in relazione alle dimensioni del layout.

Si noti che la distanza del collegamento è ancora regolata mentre il layout è in esecuzione. È inoltre possibile trovare l'impostazione linkStrength() utile.

+0

Quindi si intende che linkDistance sta cambiando mentre l'algoritmo è in esecuzione. Non lo sapevo Fare un linkStrength uguale a 1 significa che la distanza tra i nodi non cambierà? –

+0

No, il layout della forza regolerà sempre la distanza (almeno potenzialmente) per soddisfare gli altri vincoli. –

+1

Allora, qual è il significato di linkStrenght? Non riesco a capire quale sia la "rigidità", anche se ho notato che un link LinkStrenght mi aiuta molto. –

6

A due passi:

Step1: Aggiungere un parametro in JSON principale come segue:

{source: "Microsoft", obiettivo: "Amazon", tipo: "licensing", valore: 60} , {fonte: "Microsoft", destinazione: "HTC", digitare: "licenza", valore: 60}, {fonte: "Samsung", destinazione: "Apple", digitare: "seme", valore: 60} ,

Passaggio 2: aggiornare la distanza del collegamento per accettare il metodo.

.linkDistance(function(d) { return d.value; }) 
Problemi correlati