gpt4 book ai didi

javascript - d3.js arc.centroid(d): Error: Invalid value for attribute transform ="translate(NaN,NaN)"

转载 作者:行者123 更新时间:2023-11-30 10:00:23 24 4
gpt4 key购买 nike

我正在尝试使用 centroid() 函数将圆弧标签居中,如 D3 documentation 中所述.

arcs.append("text")
.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
.text(function(d) { return "labels"; });

但我在翻译 css 属性时遇到错误:

Error: Invalid value for attribute transform="translate(NaN,NaN)"

其中 (d) 个对象的 console.log 之一:

.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })

返回这个:

data: 80
endAngle: 1.9112350744272506
padAngle: 0
startAngle: 0
value: 80
__proto__: Object

这是我的代码:

HTML:

<div id="firstChart"></div>

JS:

var myData = [80,65,12,34,72];
var nbElement = myData.length;
var angle = (Math.PI * 2) / nbElement ;
var myColors = ["#e7d90d", "#4fe70d", "#0de7e0", "#f00000", "#00DC85"];
var width = 1500;
var height = 1500;
var radius = 200;

var canvas = d3.select("#firstChart")
.append("svg")
.attr("height", height)
.attr("width", width);

var group = canvas.append("g")
.attr("transform","translate(310, 310)");

var arc = d3.svg.arc()
.innerRadius(0)
.outerRadius(function (d,i) { return (myData[i]*2); })
.startAngle(function (d,i) { return (i*angle); })
.endAngle(function (d,i) { return (i*angle)+(1*angle); });

var pie = d3.layout.pie()
.value(function (d) { return d; });

var arcs = group.selectAll(".arc")
.data(pie(myData))
.enter()
.append("g")
.attr("class", "arc");

arcs.append("path")
.attr("d", arc)
.attr("fill", function (d, i) { return ( myColors[i] ); });

arcs.append("text")
.attr("transform", function(d) {console.log(d); return "translate(" + arc.centroid(d) + ")"; })
.text(function(d) { return d.data; });

var outlineArc = d3.svg.arc()
.innerRadius(0)
.outerRadius(radius)
.startAngle(function (d,i) { return (i*angle); })
.endAngle(function (d,i) { return (i*angle)+(1*angle); });

var outerPath = group.selectAll(".outlineArc")
.data(pie(myData))
.enter().append("path")
.attr("fill", "none")
.attr("stroke", "black")
.attr("stroke-width", "2")
.attr("class", "outlineArc")
.attr("d", outlineArc);

最佳答案

您需要将元素的索引传递给 centroid 以及数据:

    .attr("transform", function(d, i) { return "translate(" + arc.centroid(d, i) + ")"; })

在调用 arc.centroid 期间,D3 会调用您为 outerRadiusstartAngleendAngle< 创建的圆弧函数。但是,如果您不将索引传递给 arc.centroid,D3 就没有索引可以传递给所有使用索引的 arc 函数。因此,质心计算以 NaN 结束。

关于javascript - d3.js arc.centroid(d): Error: Invalid value for <text> attribute transform ="translate(NaN,NaN)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32056030/

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