我使用武力布局有一个图表,但它有一个固定的宽度w
和高度h
:如何使力布局图中D3.js响应屏幕/浏览器的大小
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]);
这会导致SVG尽管屏幕或浏览器窗口大小发生变化,该图表不会缩小或缩小。为了使其响应(即自动调整自己),我尝试使用viewBox
和preserveAspectRatio
属性:
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");
不幸的是,当我调整浏览器窗口大小没有任何反应并没有工作。我想知道力图的.size([w, h])
与此有什么关系。
请阐明如何使用viewBox
和preserveAspectRatio
属性与力布局图。
您可能还希望将重画功能附加到'window.onresize'上 – Wex 2012-08-14 15:57:33
这个问题相当陈旧,但对于那些觉得很有用的人来说,您可能还需要考虑将节点限制在一个有界的框中。在调整大小时,节点将保持在屏幕上。例如:http://bl.ocks.org/mbostock/1129492 – joshfindit 2016-08-01 16:25:46