Sto usando this nice force layout da Flowingdata.com per creare un diagramma di rete.d3.js forza layout auto zoom/scala dopo il caricamento
mio diagramma mostra attualmente tra 5 e 750 nodi con le loro relazioni. Funziona alla grande con alcune modifiche personalizzate per soddisfare le mie esigenze. Tuttavia, una cosa che non riesco a lavorare. Ho uno viewBox
con preserveAspectRatio
per adattarlo automaticamente al contenitore in cui si trova. Ma a seconda della quantità di nodi ci sono sempre alcuni nodi attorno ai bordi (principalmente superiore e inferiore) che vengono tagliati. E se ci sono nodi molto piccoli, li mostra nel mezzo con un enorme spazio vuoto attorno ad esso (è un grande contenitore in cui si trova).
C'è un modo per ingrandire o ridimensionare automaticamente il layout per adattarlo automaticamente? In modo che un grande layout venga un po 'ingrandito e ingrandito un piccolo layout. Ho una configurazione dell'evento zoom in modo che lo scorrimento e il panning funzionino come un incantesimo. Ma può farlo automaticamente per adattarsi ai contenuti?
Il codice di avvio d3.js:
vis = d3.select(selection)
.append("svg")
.attr("viewBox", "0 0 " + width + " " + height)
.attr("preserveAspectRatio", "xMidYMid meet")
.attr("pointer-events", "all")
.call(d3.behavior.zoom().scaleExtent([.1, 3])
.on("zoom", redraw)).append('g');
Suona come un buon modo per iniziare. Tuttavia, dove hai ottenuto l'oggetto zoom? Ho provato d3.behavior.zoom e d3.event ma il primo non ha un metodo scale() e quest'ultimo non può chiamare il metodo 'scale' di null. – DaFrenk