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);})

我希望标签始终位于灰色大圆圈之外。所以在右边,他们就在圆圈的右边。在左边,他们将在圆圈的左边。