gpt4 book ai didi

javascript - 如何正确给d3饼图添加标签?

转载 作者:行者123 更新时间:2023-12-01 02:26:56 25 4
gpt4 key购买 nike

我使用d3 js制作了一个饼图,我想向每个路径添加标签。

我写了一些代码:

var labels = svg.selectAll('path').insert("text").data(pie(data))
.text( function (d) { return d.value; })
.attr("font-family", "sans-serif")
.attr('x', 0)
.attr('y', 0)
.attr("font-size", "12px")
.attr("fill", "red");

但是没有可见的结果,只有我可以看到Chrome开发者工具中有新的文本元素。

Result and Chrome dev tools

我需要如何更改代码才能查看饼图各部分上的所有标签?

最佳答案

您不能将 text 节点附加为 path 的子节点。您应该使用 g 标签对这些元素进行分组,并附加 pathtext 作为 g 元素的子元素。

// append "g" it is a container for your slice and label
var arcs = vis.selectAll("g.slice")
.data(pie)
.enter()
.append("g")
.attr("class", "slice");

// draw slice of pie chart
arcs.append("path")
.attr("fill", function(d, i){
return color(i);
})
.attr("d", function (d) {
return arc(d);
});

// draw label
arcs.append("text")
.attr("transform", function(d){
d.innerRadius = 0;
d.outerRadius = r;
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor", "middle")
.text( function(d, i) {
return data[i].label;}
);

在这种情况下,您的结构将如下所示:

<g>
<path d=...></path>
<text>some text</text>
</g>
<g>
<path d=...></path>
<text>some text</text>
</g>
...

检查工作示例:

var w = 280;
var h = 280;
var r = h/2;
var color = d3.scale.category20c();

var data = [{"label":"Category A", "value":20},
{"label":"Category B", "value":50},
{"label":"Category C", "value":30}];

var vis = d3.select('body').append("svg:svg").data([data]).attr("width", w).attr("height", h).append("svg:g").attr("transform", "translate(" + r + "," + r + ")");
var pie = d3.layout.pie().value(function(d){return d.value;});

var arc = d3.svg.arc().outerRadius(r);

var arcs = vis.selectAll("g.slice")
.data(pie)
.enter()
.append("g")
.attr("class", "slice");

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

arcs.append("text")
.attr("transform", function(d){
d.innerRadius = 0;
d.outerRadius = r;
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor", "middle")
.text( function(d, i) {
return data[i].label;}
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于javascript - 如何正确给d3饼图添加标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48702320/

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