Javascript 如何根据数据确定D3 SVG图形的宽度?

Javascript 如何根据数据确定D3 SVG图形的宽度?,javascript,d3.js,Javascript,D3.js,我在创造一个新的世界。我生成自己的JSON并将其提供给树。这很好,只是我想不出一种方法来根据数据的深度调整树的宽度 即使在示例和文档中,SVG图形的宽度也只是硬编码的。从可观察的例子来看: let width = 1954 // create the D3 hierarchy using width tree = data => { const root = d3.hierarchy(data); root.dx = 10; root.dy = width / (roo

我在创造一个新的世界。我生成自己的JSON并将其提供给树。这很好,只是我想不出一种方法来根据数据的深度调整树的宽度

即使在示例和文档中,SVG图形的宽度也只是硬编码的。从可观察的例子来看:

let width = 1954

// create the D3 hierarchy using width
tree = data => {
   const root = d3.hierarchy(data);
   root.dx = 10;
   root.dy = width / (root.height + 1);
   return d3.tree().nodeSize([root.dx, root.dy])(root);
}

// create the SVG graphic using width
const svg = d3.create("svg")
  .attr("viewBox", [0, 0, width, x1 - x0 + root.dx * 2]);
但如果数据比预期的要小或大得多,这看起来很奇怪。 这是D3中的小故障吗?如何调整D3 SVG的大小以适应其自身的内容?
我是否忽略了?

中的某些内容,因此您希望为树的每个节点指定一组像素数(例如300*100),并让整个树的大小取决于节点的数量和深度?是的,宽度变量应取决于树实际需要显示的宽度。如果我只是输入一个硬编码的数字,它通常会显示得太宽或太窄。而且
.nodeSize([200,40])
不是您要找的?不是,因为它仍然没有根据树中的分支数进行调整。我可以硬编码一个宽度,但我不知道树会有多少分支。树数据是动态生成的。您是否意识到,如果一棵树有5层,最宽的一层有10个节点,
.nodeSize([100,10])
会自动生成500*100像素的树?看,每一层与前一层的距离总是完全相同的,不管有多少层