Cómo hacer un gráfico de diseño de fuerza en D3.js que responda al tamaño de la pantalla / navegador

Tengo un gráfico que usa el diseño de fuerza, pero tiene un ancho fijow y alturah:

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

lo que da como resultado un gráfico svg que no se reduce o disminuye a pesar de los cambios en el tamaño de la pantalla o la ventana del navegador. Con el fin de que sea sensible (es decir, se redimensiona automáticamente), intenté usarviewBox ypreserveAspectRatio atributos:

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

Desafortunadamente, esto no funcionó ya que nada sucede cuando ajuste el tamaño de la ventana del navegador. Me pregunto si el.size([w, h]) La fuerza de la gráfica tiene algo que ver con esto.

Por favor arroje algo de luz sobre cómo usarviewBox ypreserveAspectRatio Atributos con gráficos de fuerza de diseño.

Respuestas a la pregunta(3)

Su respuesta a la pregunta