Ho un grafico utilizzando layout di forza, ma ha una larghezza fissa w
ed altezza h
:Come rendere grafico di layout vigore nel d3.js sensibile alle dimensioni dello schermo/navigatore
var svg = d3.select("#viz").append("svg")
.attr("id", "playgraph")
.attr("width", w)
.attr("height", h)
var force = d3.layout.force()
.nodes(nodes)
.links(links)
.charge(-1600)
.linkDistance(45)
.size([w, h]);
che si traduce in uno svg grafico che non si ridimensiona o diminuisce nonostante le modifiche apportate allo schermo o alle dimensioni della finestra del browser. Al fine di rendere più reattivo (vale a dire si ridimensiona automaticamente), ho provato ad utilizzare viewBox
e preserveAspectRatio
attributi:
var svg = d3.select("#viz").append("svg")
.attr("id", "playgraph")
.attr("width", w)
.attr("height", h)
.attr("viewBox", "0, 0, 600, 400")
.attr("preserveAspectRatio", "xMidYMid meet");
Purtroppo, questo non ha funzionato come non succede nulla quando ho regolare le dimensioni della finestra del browser. Mi chiedo se lo .size([w, h])
del grafico delle forze abbia qualcosa a che fare con questo.
Si prega di fare luce su come utilizzare gli attributi viewBox
e preserveAspectRatio
con i grafici di imposizione forzata.
Si consiglia di allegare la funzione di ridisegno a 'window.onresize' – Wex
Questa domanda è abbastanza vecchia, ma per coloro che la trovano utile, si potrebbe anche considerare di limitare anche i nodi a una casella limitata. Al ridimensionamento, i nodi rimarranno sullo schermo. Esempio: http://bl.ocks.org/mbostock/1129492 – joshfindit