Como forçar o gráfico de layout em D3.js responsivo ao tamanho da tela / navegador

Eu tenho um gráfico usando layout de força, mas tem uma largura fixaw e 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]); 

o que resulta em um gráfico svg que não é dimensionado ou diminuído apesar das alterações na tela ou no tamanho da janela do navegador. Para torná-lo responsivo (ou seja, redimensiona-se automaticamente), tentei usarviewBox epreserveAspectRatio 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");

Infelizmente, isso não funcionou, pois nada acontece quando eu ajustei o tamanho da janela do navegador. Eu me pergunto se o.size([w, h]) do gráfico de força tem algo a ver com isso.

Por favor, lance alguma luz sobre como usarviewBox epreserveAspectRatio atributos com gráficos de layout de força.

questionAnswers(3)

yourAnswerToTheQuestion