【问题标题】:D3 adding text lables to horizontal stacked barchartD3向水平堆积条形图添加文本标签
【发布时间】:2014-06-03 07:11:24
【问题描述】:

您好,感谢 FernOfTheAndes 回答这个问题。我还有一个疑问。请参阅下面的 FIDDLE 和原始问题。

我的问题是,如何在下面的示例中添加文本标签。理想情况下,我希望将值显示在矩形中。但是,对于堆叠条形图,处理过程似乎有所不同,嵌套数组信息似乎没有被拾取。

例如

var dataset = [
[{
    x: 0,
    y: 20 // test with different values
}],
[{
    x: 0,
    y: 30 // test with different values
}],

[{
    x: 0,
    y: 50 // test with different values
}]

];

如何让 20、30、50 显示在各自的矩形中?

如果有人可以更新 FIDDLE 或粘贴我需要做的完整代码以添加文本标签。

原代码如下: D3 Horizontal stacked bar chart axis cut off

小提琴:http:// jsfiddle.net/zDkWP/

非常感谢,

【问题讨论】:

    标签: javascript svg d3.js


    【解决方案1】:

    这是您需要做的。由于您已经将 groups 作为节点,您只需使用与矩形相同的比例将 text 元素附加到它们。要将文本放置在矩形内,您需要在xy 上进行一点偏移,尤其是在y 上。出于演示目的,我硬编码了 y 的偏移量,将其加 20,但您应该为两个维度使用更智能的偏移量。

    var text = groups.selectAll("text")
        .data(function (d) {
            return d;
        })
      .enter()
      .append("text")
        .attr("class","text")
        .attr("x", function (d) {
            return xScale(d.y0); // could use an offset here as well...
        })
        .attr("y", 70) // just added 20 as an offset...for demo purposes
        .text(function(d) { return d.y;});
    

    还有一点 CSS 帮助:

    .text {
        fill: white;
    }
    

    更新FIDDLE

    【讨论】:

    • 再次感谢您!我确实尝试了一些非常相似的方法,但在三个方面都失败了。
    • 1.在 .data() 我输入 .data(dataset) 假设它正在调用数据集。我很难理解为什么 .data 属性中需要一个函数,因为您只是调用数据集,而是从 .text 属性中选择值。 2. 我没有创建一个名为 text 的新变量,而是尝试附加 groups.selectAll("text")。创建一个新的变量文本如何自动执行d3?一定要分组吗?最后 3. 将我的代码放在 callAxis 位之后。不确定这是否有什么不同。我每天都在学习更多!干杯。
    • 对于第 2 项,实际上不需要创建文本变量,因为我们没有在其他任何地方使用它,您可以简单地执行 groups.selectAll("text")...。对于第 3 项,顺序没有区别,因为有问题的两段代码之间没有依赖关系。对于第 1 项,我无法比here 更好地解释它...但是请阅读整个页面...非常有启发性。
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多