【发布时间】:2012-08-10 03:59:18
【问题描述】:
我有一个使用强制布局的图表,但它有一个固定的宽度w 和高度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]);
尽管屏幕或浏览器窗口大小发生变化,但这会导致 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 -
这个问题已经相当老了,但对于那些觉得它有用的人,您可能还需要考虑将节点限制在有界框内。调整大小时,节点将保留在屏幕上。示例:bl.ocks.org/mbostock/1129492
标签: javascript svg d3.js force-layout