带鱼眼的 d3 气泡图

d3 bubble chart with fisheye

我正在尝试实施 fish-eye plugin distortion with a bubble chart

我已经使用 documentation 和其他示例为此制定了所有方法。

使用:

svg.on("mousemove", function () {
    fisheye.focus(d3.mouse(this));

    node.each(function (d) {
        d.fisheye = fisheye(d);
    })
        .attr("r", function (d) {
        return d.fisheye.r * 2;
    });
});

var fisheye = d3.fisheye.circular().radius(120);

请参阅我的 fiddle 示例。

将此应用到浏览器,当我将鼠标移到气泡上时,没有任何附加内容。

注意:我尝试在鱼眼调用中添加 cx 和 cy 属性,但我的图表没有实现这两个坐标。是这个原因吗?

示例:

svg.on("mousemove", function () {
        fisheye.focus(d3.mouse(this));

        node.each(function (d) {
            d.fisheye = fisheye(d);
        })
        .attr("cx", function (d) {
        return d.fisheye.x;
        })
        .attr("cy", function (d) {
        return d.fisheye.y;
        })
        .attr("r", function (d) {
            return d.fisheye.r * 2;
        });
    });

是否有任何解决方案,或者我正在尝试实现目前无法实现的功能?

非常感谢, 菲利普

更改属性不会自动更新图形。您需要使用新的 fisheyed 属性重新绘制 svg。这是你的 updated fiddle.

svg.on("mousemove", function () {
    fisheye.focus(d3.mouse(this));

    node.each(function (d) {
        d.fisheye = fisheye(d);
    });

     node.selectAll("circle")
          .attr("cx", function(d) { return d.fisheye.x - d.x; })
          .attr("cy", function(d) { return d.fisheye.y - d.y; })
          .attr("r", function(d) { return d.fisheye.z * d.r; });

      node.selectAll("text")
          .attr("dx", function(d) { return d.fisheye.x - d.x; })
          .attr("dy", function(d) { return d.fisheye.y - d.y; });
});