【发布时间】:2014-10-08 19:27:08
【问题描述】:
我正在尝试用d3.js 制作一个饼图,如下所示:
请注意,标签沿pie chart 的边缘放置。最初,我能够绘制饼图并正确放置文本节点(小提琴只显示一个饼图;但是,假设它们都有有效且合适的数据,就像这个一样)。但是,当我去调整数据时,我似乎无法将它们 .attr(translate, transform) 到饼图边缘的正确区域(或者对它们做任何事情,就此而言):
changeFunctions[i] = function (data, i) {
path.data(pie(data))
.transition()
.duration(750)
.attrTween("d", arcTween);
text.each(function (d, num) {
d3.select(this)
.text(function (t) {
return t.data.name+". "+(100 * t.data.votes/totalVotes).toFixed(0) + "%";
})
/*
.attr("transform", function (d) {
//console.log("the d", d)
var c = arc.centroid(d),
x = c[0], y = c[1],
h = Math.sqrt(x * x + y * y);
return "translate(" + (x/h * 100) + ',' + (y/h * 100) + ")";
})*/
.attr("opacity", function (t) {
return t.data.votes == 0 ? 0 : 1;
});
})
}
我省略了绘制饼图的通用代码;它在jsfiddle中。基本上,我在for 循环中绘制每个饼图并将这个函数changeFunctions[i] 存储在一个闭包中,这样我就可以访问path 和text 等变量。
此函数的path.data 部分有效;饼图正确调整其楔形。但是,text.each 部分没有。
我应该如何让文本节点同时更新它们的值和位置?
fiddle
【问题讨论】:
标签: javascript d3.js