Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3可折叠树,节点合并问题_Javascript_D3.js - Fatal编程技术网

Javascript D3可折叠树,节点合并问题

Javascript D3可折叠树,节点合并问题,javascript,d3.js,Javascript,D3.js,我正在使用可折叠树,如链接所示。我的数据非常大,因此由此产生的视图彼此崩溃。截图如下:- 目前我正在调查。它帮助我动态地增加树的大小。通过此操作,我可以更改节点的合并,如下所示:- 现在我的问题是如何动态增加帧高度?。 当我展开所有节点时,树的大小大于画布/帧的高度 我已经找到了解决办法。我正在更改可折叠树代码的更新函数。以下是我的密码:- function update(source) { var duration = d3.event && d3.event.altKey

我正在使用可折叠树,如链接所示。我的数据非常大,因此由此产生的视图彼此崩溃。截图如下:-

目前我正在调查。它帮助我动态地增加树的大小。通过此操作,我可以更改节点的合并,如下所示:-

现在我的问题是如何动态增加帧高度?。
当我展开所有节点时,树的大小大于画布/帧的高度

我已经找到了解决办法。我正在更改可折叠树代码的更新函数。以下是我的密码:-

function update(source) {

var duration = d3.event && d3.event.altKey ? 5000 : 500;    

// compute the new height
var levelWidth = [1];
var childCount = function(level, n) {
if(n.children && n.children.length > 0) {
  if(levelWidth.length <= level + 1) levelWidth.push(0);      
  levelWidth[level+1] += n.children.length;
  n.children.forEach(function(d) {`
    childCount(level + 1, d);
  });
}
};

childCount(0, root);  

newHeight = d3.max(levelWidth) * 60; // 20 pixels per line    

tree = tree.size([newHeight, width]);

d3.select("svg").remove();//TO REMOVE THE ALREADY SVG CONTENTS AND RELOAD ON EVERY UPDATE

svg = d3.select("body").append("svg");

svg.attr("width", width + margin.right + margin.left)
.attr("height", newHeight + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Compute the new tree layout.
var nodes = tree.nodes(root).reverse(),
links = tree.links(nodes);

// Normalize for fixed-depth.
nodes.forEach(function(d) { d.y = d.depth * 180; });

// Update the nodes…
var node = svg.selectAll("g.node")
  .data(nodes, function(d) { return d.id || (d.id = ++i); });

// Enter any new nodes at the parent's previous position.
var nodeEnter = node.enter().append("g")
  .attr("class", "node")
  .attr("transform", function(d) { return "translate(" + source.y0 + "," +                     source.x0 + ")"; })
  .on("click", click);

nodeEnter.append("circle")
  .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });

nodeEnter.append("text")
  .attr("x", function(d) { return d.children || d._children ? -10 : 10; })
  .attr("dy", "-.75em")
  .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
  .text(function(d) { return d.name; })
  .style("fill-opacity", 1e-2);

nodeEnter.append("text")
  .attr("x", function(d) { return d.children || d._children ? -10 : 10; })
  .attr("dy", "1.00em")
  .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
  .text(function(d) { return d.info1; })
  .style("fill-opacity", 1e-2);

// Transition nodes to their new position.
var nodeUpdate = node.transition()
  .duration(duration)
  .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; });

nodeUpdate.select("circle")
  .attr("r", 6)
  .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });

nodeUpdate.selectAll("text")
  .style("fill-opacity", 4);

// Transition exiting nodes to the parent's new position.
var nodeExit = node.exit().transition()
  .duration(duration)
  .attr("transform", function(d) { return "translate(" + source.y + "," +     source.x + ")"; })
  .remove();

nodeExit.selectAll("text")
  .style("fill-opacity", 1e-6);

// Update the links…
var link = svg.selectAll("path.link")
  .data(links, function(d) { return d.target.id; });

// Enter any new links at the parent's previous position.
link.enter().insert("path", "g")
  .attr("class", "link")
  .attr("d", function(d) {
    var o = {x: source.x0, y: source.y0};
    return diagonal({source: o, target: o});
  });

// Transition links to their new position.
link.transition()
  .duration(duration)
  .attr("d", diagonal);

// Transition exiting nodes to the parent's new position.
link.exit().transition()
  .duration(duration)
  .attr("d", function(d) {
    var o = {x: source.x, y: source.y};
    return diagonal({source: o, target: o});
  })
  .remove();

// Stash the old positions for transition.
nodes.forEach(function(d) {
d.x0 = d.x;
d.y0 = d.y;
});

}
函数更新(源代码){
var持续时间=d3.event&&d3.event.altKey?5000:500;
//计算新高度
var levelWidth=[1];
var childCount=函数(级别,n){
如果(n.children&&n.children.length>0){

如果(levelWidth.length),你的问题是什么?