Javascript d3如何使圆周上的物体与中心的距离相等
这是我的。我有一个中心派和圆周上的圆圈。到现在为止一切都很好。但是现在我想把文本和图像放到所有的小圆圈里,当我添加文本时,它从中心开始的位置是不一致的 对于这个问题,我想,我应该一次画几个,每个象限,并相应地调整宽度。但我的小圆圈总数是可变的,因此我不知道每个象限在一个特定的时间有多少个圆圈。我希望有一个更优雅的解决方案,我可能错过了。如果有人愿意分享Javascript d3如何使圆周上的物体与中心的距离相等,javascript,css,svg,d3.js,Javascript,Css,Svg,D3.js,这是我的。我有一个中心派和圆周上的圆圈。到现在为止一切都很好。但是现在我想把文本和图像放到所有的小圆圈里,当我添加文本时,它从中心开始的位置是不一致的 对于这个问题,我想,我应该一次画几个,每个象限,并相应地调整宽度。但我的小圆圈总数是可变的,因此我不知道每个象限在一个特定的时间有多少个圆圈。我希望有一个更优雅的解决方案,我可能错过了。如果有人愿意分享 sub_circle.append('text') .attr('class', 'labels') .text(functio
sub_circle.append('text')
.attr('class', 'labels')
.text(function (d) {
return d.name;
})
.attr('x', function (d, i) {
return (350 * Math.cos(scale_arcs_parent(i)) + 500);
})
.attr('y', function (d, i) {
return (350 * Math.sin(scale_arcs_parent(i)) + 350);
})
您看到的是,文本定位点与中心的距离相同,但由于其相对于文本的位置发生变化,因此文本的距离似乎不同。通过根据角度设置
文本锚定
,可以在一定程度上缓解这种情况
.attr("text-anchor", function(d, i) {
var a = scale_arcs_parent(i);
if(a < Math.PI/4) return "start";
if(a < 3*Math.PI/4) return "middle";
if(a < 5*Math.PI/4) return "end";
if(a < 7*Math.PI/4) return "middle";
return "start";
})
.attr(“文本锚定”,函数(d,i){
var a=比例\弧\父(i);
如果(a
完成jsfiddle。显然,您可以调整锚定值的阈值以满足您的需要。您没有准确描述文本的显示方式(例如相对于圆圈的位置),因此我不得不猜测 您可以使用
文本锚定
和dy
的组合来保持标签相对于圆圈的位置
sub_circle
.append('text')
.attr('class','labels')
.attr('text-anchor','middle')
.attr('dy','-30')
.text(function(d){return d.name;})
.attr('x',function(d,i){return (300*Math.cos(scale_arcs_parent(i))+500);})
.attr('y',function(d,i){return (300*Math.sin(scale_arcs_parent(i))+350);})
我希望标签始终位于灰色大圆圈之外。所以在右边,他们就在圆圈的右边。在左边,他们将在圆圈的左边。