我想在 d3.js 库中提供的堆叠条形图中的堆叠条的每个条中都有一些文本。
谢谢你的帮助。
我已经自定义了此处的示例链接,但我没有更改 javascript 代码中的任何其他内容
这是结果
这是重要的一段代码:
state.selectAll("rect")
.data(function(d) { return d.ages; })
.enter().append("rect")
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.y1); })
.attr("height", function(d) { return y(d.y0) - y(d.y1); })
.style("fill", function(d) { return color(d.name); });
这将每个点绑定data
到彩色矩形。要添加文本,请按如下方式更改:
var ages_enter = state.selectAll("rect")
.data(function(d) { return d.ages; })
.enter();
ages_enter.append("rect")
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.y1); })
.attr("height", function(d) { return y(d.y0) - y(d.y1); })
.style("fill", function(d) { return color(d.name); });
ages_enter.append("text")
.text(function(d) { return d3.format(".2s")(d.y1); })
.attr("y", function(d) { return y(d.y1)+16; })
.style("stroke", '#ffffff');
这存储了一个指向为每个数据点调用的“输入”方法的指针,然后为每个数据点添加一个附加元素到 svg。
我用这段代码绘制出来。文本将附加到堆叠图表的中心。我们需要找出 x 坐标值来定位文本。对于那个 barWidth/2 被使用。演示排序堆积条形图
var state= svg.selectAll(".state")
.data(data)
.enter().append("g")
.attr("class", "state")
.attr("transform", function(d) { return "translate(" + (x(d.state)) + ",0)"; });
module.selectAll("rect")
.data(function(d) { return d.ages; })
.enter().append("rect")
.attr("width", x.rangeBand())
.attr("y", 200)
.attr("height", 100)
.style("fill", function(d) { return color(d.name); })
.transition()
.delay(function(d, i) { return i * 200; })
.duration(4000)
.attr("y", function(d) { return y(d.y1); })
.attr('height', function(d) { return y(d.y0) - y(d.y1); });
module.append("text")
.attr("y", 400)
.attr("x",x.rangeBand()/2 )
.style("text-anchor", "middle")
.style("font-size", "20px")
.style("color", "white")
.text(function(d,i) { return i+1; });