gpt4 book ai didi

d3.js - 如何正确地使文本宽度达到图形栏上方的中心标签?

转载 作者:行者123 更新时间:2023-12-04 06:21:02 24 4
gpt4 key购买 nike

我目前有一个图形,该图形的每个条上方都显示有相关的条值,但是由于无法获取每个文本元素的宽度,我很难将值标签居中。

这是我目前的图形绘制方式:

我需要做的就是减去每个文本元素的宽度的一半,但是我似乎无法使用以下Coffeescript做到这一点:

    #Drawing value labels   
svg.selectAll("rect")
.data(data)
.enter()
.append("text")
.text((d)-> d.Total)
.attr("width", x.rangeBand())
.attr("x", (d)->
textWidth = d3.selectAll("text").attr("width")

x(d.Year) + (x.rangeBand() / 2) - (textWidth / 2)
)
.attr("y", (d)-> y(d.Total) - 5)
.attr("font-size", "10px")
.attr("font-family", "sans-serif")

#Drawing bars
svg.selectAll("rect")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", (d)-> x(d.Year))
.attr("width", x.rangeBand())
.attr("y", (d)-> y(d.Total))
.attr("height", (d)-> height - y(d.Total))

有没有一种方法可以访问每个文本元素的width属性以将值设置为offset?

最佳答案

您可以获取文本的边界框,并使用这些值来应用变换以使其居中。获取边界框的示例是here。该代码看起来像

.text(function(d) { return d.Total; })
.attr("x", function(d) {
return x(d.Year) + (x.rangeBand() / 2) - (this.getBBox().width / 2);
}
...

关于d3.js - 如何正确地使文本宽度达到图形栏上方的中心标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15577430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com