避免D3.js中子节点的重叠

3
我正在使用D3.js构建一个树形结构,展示Facebook用户及其好友关系。根节点为用户本人,子节点为好友。由于UI中宽度已固定,子节点之间出现了重叠问题。
              var nodes = tree.nodes(root).reverse(),
               links = tree.links(nodes);

              nodes.forEach(function(d) { d.y = d.depth * 130; });

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

              var nodeEnter = node.enter().append("g")
               .attr("class", "node")
               .attr("value", function(d){
                return d.id; })
               .attr("transform", function(d) { 
                return "translate(" + d.x + "," + d.y + ")"; });

              var defs = node.append("defs").attr("id", "imgdefs");

              var imgPattern = defs.append("pattern")
                    .attr("id", "img")
                    .attr("height", 50)
                    .attr("width", 50)
                    .attr("x", "0")
                    .attr("y", "0");


                imgPattern.append("image")
                     .attr("height", 60)
                     .attr("width", 60)
                     .attr("xlink:href", function(d) { return d.img; });

                nodeEnter.append("circle")
                    .attr("r", 30)
                    .style("stroke","white")
                    .style("stroke-width", 4)
                    .attr("fill", "url(#img)");

我想在子节点中每行/深度显示10个朋友。有任何帮助或建议请告诉我。谢谢!
这是我的jsfiddle链接:代码在这里
1个回答

4
一种实现这个目的的方法是设置 树形布局nodeSizeseparation 属性。以下是代码片段:
var tree = d3.layout.tree()
    //.size([height, width])
    .nodeSize([30,])
    .separation(function separation(a, b) {
        return a.parent == b.parent ? 2 : 1;
    });

我将nodeSize属性的x维度设置为圆的半径。
此外,需要更改g变换以重新定位图表:
.attr("transform", "translate(" + (margin.left + width/2) + "," + margin.top + ")");

您可以放心忽略size属性(请参见上面链接中的文档以及这个SO答案)。这是一个带有更改内容的FIDDLE。我添加了另一行不同深度的圆圈以检查解决方案是否足够健壮。我认为这应该可以让您开始了。

非常感谢您的回复...我想问一下如何将最后一行(3张图片)的链接更改为连接到父节点? - Kentarou
@Kentarou YW。问题最初的意图是解决重叠问题。如果答案解决了这个问题,您应该接受答案。至于您评论中的问题,您所说的最后一行是指我添加到您原始数据中的行吗? - FernOfTheAndes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接