D3 将缩放添加到圆形包

D3 add zoom to circle pack

是否可以为圆形包添加缩放功能?看起来应该是这样,但是当单击缩放时,我的会到处乱跳。这几天我一直在尝试解决这个问题,但收效甚微。

我一直在参考 Mike 的 Zoomable Circle Packing 积木 (#7607535) 和 nilanjenator 的积木 (#4950148)。其他例子似乎都是基于这两个。这是我正在进行的工作的 fiddle:http://jsfiddle.net/cajmcmahon/9weovdm2/5/.

据我所知,我的布局问题出在这两个函数上:

t.selectAll("circle")
        .attr("cx", function(d) {
            return x(d.x);
        })
        .attr("cy", function(d) {
            return y(d.y);
        })
        .attr("r", function(d) {
            return k * d.r;
        });

t.selectAll("text")
        .attr("x", function(d) {
            return x(d.x);
        })
        .attr("y", function(d) {
            return y(d.y);
        })
        .style("opacity", function(d) { return k * d.r > 20 ? 1 : 0; });

此外,当我单击背景时,我无法重置可视化(缩小?)。我相信它没有获得 'data'...

的值
//Reset when click on background
    d3.select(window).on("click", function(d, i) {
        zoom(data)
    });

感谢您的帮助。

好的两个例子:

输出相同,但实现方式不同。

  1. http://bl.ocks.org/nilanjenator/4950148:这个是靠改变圆的cx和cy来移动和更新半径来达到缩放效果的
  2. http://bl.ocks.org/mbostock/7607535: 这个是靠translate移动圆圈的

因此在您的示例中:您将两者混合,因此得到了不同风味的圆形包装。

您创建了圆圈并使用平移将其移动到它们的位置,但在缩放部分您使用了更改 cx 和 cy,结果您的圆圈在缩放时飞出包装。

我已经删除了翻译并提供了 cx 和 cy,因此缩放功能与您编写的相同。

node.append("circle")
    .attr("r", function(d) {
        return d.r;
    })
     .attr("class", function(d) { return d.children ? "parent" : "child"; })
  .attr("cx", function(d) { return d.x; })
  .attr("cy", function(d) { return d.y; })

    .on("click", function(d) { 
        zoom(node == d ? root : d); 
    });

我已经更改了 fiddle 你在这里给出的是一个工作示例: http://jsfiddle.net/cyril123/khq21pgb/2/

希望对您有所帮助!