Jak zrobić wykres układu sił w D3.js odpowiadający rozmiarowi ekranu / przeglądarki

Mam wykres wykorzystujący układ sił, ale ma on stałą szerokośćw i wysokośćh:

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

co powoduje, że wykres svg nie jest skalowany ani obniżany pomimo zmian w ekranie lub rozmiarze okna przeglądarki. Aby sprawić, by był responsywny (tj. Automatycznie zmieniał rozmiar), próbowałem użyćviewBox ipreserveAspectRatio atrybuty:

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

Niestety to nie zadziałało, ponieważ nic się nie dzieje, gdy dostosowuję rozmiar okna przeglądarki. Zastanawiam się, czy.size([w, h]) wykres siły ma z tym coś wspólnego.

Proszę rzucić trochę światła na sposób użyciaviewBox ipreserveAspectRatio atrybuty z wykresami układu sił.

questionAnswers(3)

yourAnswerToTheQuestion