0

我对 D3 比较陌生,并试图向条形图添加标签。我一直遇到标签将所有值应用于每个标签的问题。此代码之前是正常的数据加载等。

        // Controls Bar Layout and Offset (x(d.weekOf)+20)

    var property = svg.selectAll(".property")
        .data(data)
        .enter().append("g")
        .attr("class", "g")
        .attr("transform", function(d) { return "translate(" + (x(d.weekOf)+20) + ",0)"; });

    //  Theese are the bars, width is the width of the bars

    property.selectAll("rect")
        .data(function(d) { return d.emissions; })
        .enter().append("rect")
        .attr("width", "80")
        .attr("y", function(d) { return y(d.y1); })
        .attr("height", function(d) { return y(d.y0) - y(d.y1); })
        .attr("opacity", "0.7")
        .style("fill", function(d) { return color(d.name); });

    //  Add Capacity Labels

    property.selectAll("text")
        .data(data)
        .enter()
        .append("text")
        .text(function(d, i) {return d.Internal; })
        .attr("x", 41)
        .attr("y", 210)
        .attr("text-anchor", "middle");

显然我错过了一些简单的东西..?

4

1 回答 1

1

您的标签是属性选择的子选择,因此不要使用 data() 将每个属性标签按原样连接到整个数据集,而应使用 data 连接到相应的父数据,如下所示:

 property.selectAll("text")
    .data(function(d) {return [d];})
    .enter()
    .append("text")
    .text(function(d, i) {return d.Internal; })
    .attr("x", 41)
    .attr("y", 210)
    .attr("text-anchor", "middle");
于 2013-07-30T19:59:58.560 回答