javascript - d3 饼 : redraw label on path change

标签 javascript d3.js

我正在使用 d3 绘制一个饼图,并使用单选按钮更改显示的路径。我的问题是根据新路径重新计算标签位置。加载时,标签绘制正确,但单击时,位置仍与首次加载时相同。 我认为问题在于 g 仅采用第一个数据值,而我不知道如何说采用当前数据值。

绘制标签的函数是

//Labels
    d3.selectAll("g").select("text").transition()
        .ease("linear")
        .duration(500)
        .style("opacity", 0).remove();
    svg.selectAll("g").append("text")
        .attr("transform", function (d) {
            var c = arc.centroid(d),
                x = c[0],
                y = c[1],
                // pythagorean theorem for hypotenuse
                h = Math.sqrt(x * x + y * y);
            return "translate(" + (x / h * labelr) + ',' +
                (y / h * labelr) + ")";
        })
        .attr("dy", ".35em")
        .style("opacity", 0)
        .style("fill", "#000")
        .style("font-size", 12)
        .attr("text-anchor", function (d) {
            // are we past the center?
            return (d.endAngle + d.startAngle) / 2 > Math.PI ?
                "end" : "start";
        })
        .text(function (d) { return d.data.label; })
        .transition()
        .ease("linear")
        .delay(1000)
        .duration(500)
        .style("opacity", 1);

有关更多信息,请参阅 https://jsfiddle.net/w0ckw4tb/

谢谢

最佳答案

只需在附加新文本节点之前应用新的数据绑定(bind)即可:

svg.selectAll("g").data(pie) // <== !!!
    .append("text")
    .attr("transform" ...

如果您没有这样做,则此代码:

.attr("transform", function (d) {
    var c = arc.centroid(d),
        x = c[0],
        y = c[1],
        // pythagorean theorem for hypotenuse
        h = Math.sqrt(x * x + y * y);
    return "translate(" + (x / h * labelr) + ',' +
        (y / h * labelr) + ")";
})

transform 属性返回相同的值,因此标签保持在同一位置。

检查working fiddle .

关于javascript - d3 饼 : redraw label on path change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532442/

相关文章:

javascript - 单击 react 时如何将光标/插入符号移动到输入末尾

javascript - 在 JavaScript 中使用对象数组

javascript - 我应该如何处理 javascript 调用中的 Asp.net MVC URL?

javascript - 即使切换它时,hasClass 也始终返回 false

javascript - 平移不能正确处理散点图

javascript - 在 D3.js 中的 Bundle 布局中读取 JSON 文件时出错

javascript - 力向图 - 定义节点的颜色,如果该节点同时是源和目标

javascript - D3 从所选内容中的一个元素中删除点击事件

javascript - 在输入字段中使用子字符串

javascript - D3 转换,更少的 cpu 使用?