【问题标题】:How to display data value on every layout of stacked barchart in d3如何在d3中堆叠条形图的每个布局上显示数据值
【发布时间】:2013-05-07 10:09:15
【问题描述】:

我在 d3 中创建了一个堆积条形图。

这里我想显示如下示例中的值(这是简单的条形图)

http://bl.ocks.org/enjalot/1218567

但不在栏外,在栏内如下:

http://bl.ocks.org/diethardsteiner/3287802

这是我的 Stacked 函数,工作正常:

function barStack(d) 
{
    var l = d[0].length
    while (l--) {
        var posBase = 0,
            negBase = 0;
        d.forEach(function (d) {
            d = d[l]
            d.size = Math.abs(d.y)
            if (d.y < 0) {
                d.y0 = negBase
                negBase -= d.size
            } else {
                d.y0 = posBase = posBase + d.size
            }
        })
    }
    d.extent = d3.extent(d3.merge(d3.merge(d.map(function (e) {
        return e.map(function (f) {
            return [f.y0, f.y0 - f.size]
        })
    }))))
    return d
}

对于堆叠条

 svg.selectAll(".series")
    .data(data)
    .enter()
  .append("g")
    .attr("class", "g")
    .style("fill", function (d, i) {return color(i)})
    .selectAll("rect")
    .data(Object)
    .enter()
  .append("rect")
    .attr("x", function (d, i) {return x(x.domain()[i])})
    .attr("y", function (d) { return y(d.y0) })
    .attr("height", function (d) { return y(0) - y(d.size) })
    .attr("width", x.rangeBand())
;

这也运行良好。 我的数据是这样的

var data = [{x:"abc",  y1:"3",  y2:"4",  y3:"10"},
        {x:"abc2", y1:"6",  y2:"-2", y3:"-3" },
        {x:"abc3", y1:"-3", y2:"-9", y3:"4"}
       ]

现在我想在每个堆叠布局中显示 y1、y2 和 y3 的值。 我已经尝试了下面的代码,但这并没有在布局上显示值。

svg.selectAll("text")
     .data(data)
     .enter()
     .append("text")
     .attr("transform", "translate(50,0)")
     .attr("text-anchor", "middle")
     .attr("x", function(d, i) {return (i * (width / data.length)) + ((width / data.length - 50) / 2);})
     .attr("y", function(d) {return y(0) - y(d.size) + 14;})
     .attr("class", "yAxis")
     .text(function(d) {return y(d.size);})
    ;   

请帮我解决这个问题,我需要更改的地方或者我需要放置的确切内容而不是这个或者可能是上面的代码是完全错误的。 如果我需要更多输入,请告诉我。我有总 POC,我也可以分享。

我已经在 jsfiddle 中添加了所有代码

http://jsfiddle.net/goldenbutter/HZqkm/

【问题讨论】:

  • 能用jsFiddle写完整的代码吗?
  • @PabloNavarro 这是修改后的小提琴...我已经注释掉了在栏中追加文本的代码.....jsfiddle.net/goldenbutter/HZqkm
  • 任何解决方案...任何人????

标签: javascript html json d3.js


【解决方案1】:

Here 是一个可以做你想做的事情的小提琴。

var plots = svg.selectAll(".series").data(data)
    .enter()
    .append("g")
    .classed("series",true)
    .style("fill", function(d,i) {return color(i)})

plots.selectAll("rect").data(Object)
    .enter().append("rect")
    .attr("x",function(d,i) { return x(x.domain()[i])})
    .attr("y",function(d) { return y(d.y0)})
    .attr("height",function(d) { return y(0)-y(d.size)})
    .attr("width",x.rangeBand());

plots.selectAll("text.lab").data(Object)
    .enter().append("text")
    .attr('fill','black')
    .attr("text-anchor", "middle")
    .attr("x", function(d, i) { return x(x.domain()[i]) + (x.rangeBand()/2)})
    .attr("y", function(d) {return y(d.y0) + 20})
    .text(function(d) {return (d.size).toFixed(2);}); 

【讨论】:

  • Thanx @AmitAviv ,我检查了你的小提琴。这个位置还可以……但是你在那里得到这些值。代替“3”、“4”和“10”显示“125.86”、“225.17”和“241.72”:O
  • ya grt ....thanx 很多...在我的函数中,该值可能会打印在其他地方...所以没有显示...您更改了该值的正确位置... .. 非常感谢.. @AmitAviv
  • 我在@AmitAviv 再次发现一件事 ...所有负值都以绝对模式显示在这里...如 abc2 列中的值是“-2”和“-3”,但显示为“2 " 和 "3" ..... 可以显示为负数吗?
猜你喜欢
  • 2013-07-08
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2021-12-19
  • 2011-03-14
  • 1970-01-01
相关资源
最近更新 更多