Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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.js中更新气泡图?_Javascript_Svg_D3.js_Circle Pack - Fatal编程技术网

Javascript 如何在d3.js中更新气泡图?

Javascript 如何在d3.js中更新气泡图?,javascript,svg,d3.js,circle-pack,Javascript,Svg,D3.js,Circle Pack,我成功地创建了一个气泡图,当它是一个单一的数据集时,效果很好。但是如果我需要用其他数据集更新它,就会出现问题。请在帮助我更新功能 当您需要捕获svg:ggroup元素上的enter选择以正确应用enter/update/exit模式时,这是典型的情况。但是,为了保持标签仍然指向正确的元素,您还需要根据一些感兴趣的数据属性(d.className,它是从d.name生成的)为数据设置关键帧 以下是修改后的气泡更新功能的主要部分: var node = svg.selectAll(".node")

我成功地创建了一个气泡图,当它是一个单一的数据集时,效果很好。但是如果我需要用其他数据集更新它,就会出现问题。请在帮助我更新功能


当您需要捕获
svg:g
group元素上的enter选择以正确应用enter/update/exit模式时,这是典型的情况。但是,为了保持标签仍然指向正确的元素,您还需要根据一些感兴趣的数据属性(
d.className
,它是从
d.name
生成的)为数据设置关键帧

以下是修改后的气泡更新功能的主要部分:

var node = svg.selectAll(".node")
    .data(
        bubble.nodes(classes(root)).filter(function (d){return !d.children;}),
        function(d) {return d.className} // key data based on className to keep object constancy
    );

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

// re-use enter selection for circles
nodeEnter
    .append("circle")
    .attr("r", function (d) {return d.r;})
    .style("fill", function (d, i) {return color(i);})

// re-use enter selection for titles
nodeEnter
    .append("title")
    .text(function (d) {
        return d.className + ": " + format(d.value);
    });
完整的在这里


如果您感兴趣的话,我还讨论了将enter/update/exit模式应用于
svg:g
元素的问题。

哦,这是Andes。。这就是我需要的,谢谢你的工作。
var node = svg.selectAll(".node")
    .data(
        bubble.nodes(classes(root)).filter(function (d){return !d.children;}),
        function(d) {return d.className} // key data based on className to keep object constancy
    );

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

// re-use enter selection for circles
nodeEnter
    .append("circle")
    .attr("r", function (d) {return d.r;})
    .style("fill", function (d, i) {return color(i);})

// re-use enter selection for titles
nodeEnter
    .append("title")
    .text(function (d) {
        return d.className + ": " + format(d.value);
    });