D3.js t) ); }); 函数更新(源){ //计算展平节点列表。 var nodes=root.subjects(); 变量高度=数学最大值(500,nodes.length*barHeight+margin.top+margin.bottom); d3.选择

D3.js t) ); }); 函数更新(源){ //计算展平节点列表。 var nodes=root.subjects(); 变量高度=数学最大值(500,nodes.length*barHeight+margin.top+margin.bottom); d3.选择,d3.js,D3.js,t) ); }); 函数更新(源){ //计算展平节点列表。 var nodes=root.subjects(); 变量高度=数学最大值(500,nodes.length*barHeight+margin.top+margin.bottom); d3.选择(“svg”).transition() .持续时间(持续时间) .attr(“高度”,高度); d3.select(self.frameElement).transition() .持续时间(持续时间) .样式(“高度”,高度+px”); /

t) ); }); 函数更新(源){ //计算展平节点列表。 var nodes=root.subjects(); 变量高度=数学最大值(500,nodes.length*barHeight+margin.top+margin.bottom); d3.选择(“svg”).transition() .持续时间(持续时间) .attr(“高度”,高度); d3.select(self.frameElement).transition() .持续时间(持续时间) .样式(“高度”,高度+px”); //计算“布局”。TODOhttps://github.com/d3/d3-hierarchy/issues/67 var指数=-1; root.eachBefore(函数(n){ n、 x=++索引*条形高度; n、 y=n.深度*20; }); //更新节点… var node=svg.selectAll(“.node”) .data(节点,函数(d){返回d.id | |(d.id=++i)}); var nodeEnter=node.enter().append(“g”) .attr(“类”、“节点”) .attr(“transform”,函数(d){return“translate”(“+source.y0+”,“+source.x0+”));}) .样式(“不透明度”,0); //在父节点的上一个位置输入任何新节点。 nodeEnter.append(“rect”) .attr(“y”,-barHeight/2) .attr(“高度”,barHeight) .attr(“宽度”,barWidth) .样式(“填充”,颜色) 。开启(“点击”,点击); nodeEnter.append(“文本”) .attr(“dy”,3.5) .attr(“dx”,5.5) .text(功能(d){ 返回d.data.name+“值:”+getSize(d); }); //将节点转换到其新位置。 nodeEnter.transition() .持续时间(持续时间) .attr(“transform”,函数(d){return“translate”(“+d.y+”,“+d.x+”)”);}) .样式(“不透明”,1); node.transition() .持续时间(持续时间) .attr(“transform”,函数(d){return“translate”(“+d.y+”,“+d.x+”)”);}) .style(“不透明度”,1) .选择(“rect”) .样式(“填充”,颜色); //将退出节点转换到父节点的新位置。 node.exit().transition() .持续时间(持续时间) .attr(“transform”,函数(d){return“translate”(“+source.y+”,“+source.x+”)”);}) .style(“不透明度”,0) .remove(); //更新链接… var link=svg.selectAll(“.link”) .data(root.links(),函数(d){返回d.target.id;}); //在父对象的上一个位置输入任何新链接。 link.enter()插入(“路径”,“g”) .attr(“类”、“链接”) .attr(“d”,函数(d){ var o={x:source.x0,y:source.y0}; 返回对角线({source:o,target:o}); }) .transition() .持续时间(持续时间) .attr(“d”,对角线); //过渡链接到他们的新位置。 link.transition() .持续时间(持续时间) .attr(“d”,对角线); //将退出节点转换到父节点的新位置。 link.exit().transition() .持续时间(持续时间) .attr(“d”,函数(d){ var o={x:source.x,y:source.y}; 返回对角线({source:o,target:o}); }) .remove(); //将旧位置隐藏起来,以便过渡。 根。每个(函数(d){ d、 x0=d.x; d、 y0=d.y; }); } //在单击时切换子项。 功能点击(d){ 如果(d.儿童){ d、 _children=d.children; d、 children=null; }否则{ d、 儿童=d.\U儿童; d、 _children=null; } 更新(d); } 功能色(d){ 返回d.#children?#3182bd:d.children?#c6dbef:#fd8d3c; } 函数getSize(d){ var children=d.children | | d.| u children; 返回子项?d3.sum(子项,函数(行){return(row.children | | row._子项)→getSize(row):row.data.size;}):d.data.size; }
.node rect{
光标:指针;
填充:#fff;
填充不透明度:0.5;
行程:#3182bd;
笔划宽度:1.5px;
}
.节点文本{
字体:10px无衬线;
指针事件:无;
}
.链接{
填充:无;
行程:#9ecae1;
笔划宽度:1.5px;
}

谢谢Shashank,我们有没有办法让条形宽度反映这些值?当然可以。编辑了这篇文章。令人惊讶的是,它在我的应用程序中不起作用。这一行做什么-xScale.domain([0,d3.max(d.parent.data.children,function(child){return child.size;})]).nice()??是否可以检查控制台日志错误(如果有)?它为叶节点的
xScale
线性比例设置域,范围从0到当前级别的最大大小。(例如:对于
mergedge
节点,它将域设置为[0,6714],因为6714是该级别的最大大小)它说:(2)未捕获引用错误:未定义xScale+鼠标单击时树不再展开。
function getSize(d) {
   var children = d.children || d._children;
   return children ? d3.sum(children, function(row) { return (row.children || row._children) ? getSize(row) : row.data.size; }) : d.data.size;
}
.text(function(d) { 
  return d.data.name + " value:" + getSize(d); 
});