【问题标题】:d3 bar label on grouped chart bar分组图表条上的 d3 条形标签
【发布时间】:2019-01-05 08:47:28
【问题描述】:

我正在使用这个例子 - https://bl.ocks.org/bricedev/0d95074b6d83a77dc3ad

并尝试在条形图上添加附加信息。

我试过了:

    slice.selectAll("rect").append("text")
        .attr("class", 'bar-text')
        .attr("fill", "#000")
        .text(function (d) {
            return d.total;
        })
        .attr("transform", function (d, i) {
            var x0 = x1.rangeBand() * i + 11,
                y0 = y + 8;
            return "translate(" + x0 + "," + y0 + ")";
        })

但是文本元素附加到内部矩形元素并且不可见:

<g class="g" transform="translate(46,0)">
    <rect width="101" x="2" style="fill: rgb(8, 81, 156);" y="150.00000000000003" height="300">
        <text class="bar-text" fill="#000" transform="translate(11,function u(n){return o(n)}8)"></text>
    </rect>
    <rect width="101" x
    ...

slice.append... 不幸也只选择组。任何想法如何将此示例中的文本元素附加到栏?

【问题讨论】:

    标签: javascript d3.js svg graph


    【解决方案1】:

    看看你的截图,translate 属性包含function u(n)....。变量 y 是一个函数,而不是矩形 Y 坐标的值。要做到这一点,您需要d3.select(this).attr("y")。但是文本也不可见,我使用了y(d.value),但这是等价的。

    你必须像矩形一样添加文本。

    这个你需要添加到我在https://stackoverflow.com/a/51573685/9938317发布的d3v5代码中

    文本还没有动画,使用与矩形 Y 坐标相同的动画代码。或者在矩形动画的末尾创建文本。

    slice.selectAll("text")
          .data(function(d) { return d.values; })
        .enter().append("text")
            .attr("class", 'bar-text')
            .attr("fill", "#000")
            .attr("text-anchor", "middle")
            .text(function (d) { return d.value; })
            .attr("x", function (d, i) { return x1.bandwidth() * (i+0.5); })
            .attr("y", function (d, i) { return y(d.value) + 8; });
    

    【讨论】:

    • 谢谢,工作就像一个魅力!我只需要在 v3 中使用 x1.rangeBand() 代替 x1.bandwidth()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多