2013-08-30 21 views
9

Ho implementato il layout della forza di d3. Il problema però per me è che il layout non si sta diffondendo sullo schermo. In seguito è l'istantanea:Distanza di collegamento dinamico in configurazione forza D3

enter image description here

Voglio i nodi per diffondere attraverso lo schermo con la distanza di collegamento dinamico in quanto v'è molto spazio bianco sul lato destro e sinistro. Ho cercato di randomizzare distanza collegamento come segue:

d3.layout.force() 
    .charge(-800) 
    .linkDistance(function(d){ 
     return (Math.random() * (400 - 200) + 1); 
    }) 
    .size([w, h]); 

Ciò aumenta la distanza di collegamento, ma anche in direzione verticale. Ho provato a impostare l'attributo linkStrength() ma non ha funzionato per me. Come posso diffondere questo layout nella regione solo in direzione orizzontale? C'è un modo per definire la distanza del collegamento per adattarsi alla regione rettangolare della mia pagina?

risposta

3

Una soluzione che vedo è usare this bounding box example per legare il disegno in modo rettangolare/orizzontale e quindi impostare la carica su un livello molto alto (mira a -10000, qualcosa del genere) in modo che i nodi siano sparsi al massimo prima di essere fermato dai limiti che hai impostato. È quindi possibile scegliere di impostare alternativamente il testo a destra o a sinistra del nodo in base alla sua posizione, in modo che non venga tagliato. Oppure puoi anche rilegare il testo.

+0

Oh e, a proposito, un diagramma di accordi potrebbe adattarsi perfettamente ai tuoi dati, quindi potresti esaminare anche questo (maggiori informazioni [qui] (https://github.com/mbostock/d3/wiki/Chord-Layout)) –

+0

Quando ho associato il disegno come eseguito nell'esempio [riquadro di delimitazione] (http://mbostock.github.io/d3/talk/20110921/bounding.html) e imposta il costo su un valore molto alto, i nodi sono allineati oltre confine e in tal caso se il numero di nodi è molto alto il grafico potrebbe non essere leggibile. C'è un modo in cui posso assegnare posizioni xey specifiche a ciascun nodo mentre il layout viene eseguito in base a qualche condizione per farlo occupare l'intera area? – Nagesh