Javascript 使用d3.nest创建饼图
我有各种各样的数据,我用它们创建了一个油炸圈饼图。我想用一个数据分解图来制作一个饼图,我用d3.nest将我得到的数据细分为3类:nest将其分解为129。基本上,我有基于奖牌数量的奥运会数据,我想将这些数据细分为他们在哪些项目中获得的互动数据 我只是不知道如何使用嵌套数据创建饼图,特别是如果键是可变的。我将包括甜甜圈图表的实现Javascript 使用d3.nest创建饼图,javascript,d3.js,nested,pie-chart,Javascript,D3.js,Nested,Pie Chart,我有各种各样的数据,我用它们创建了一个油炸圈饼图。我想用一个数据分解图来制作一个饼图,我用d3.nest将我得到的数据细分为3类:nest将其分解为129。基本上,我有基于奖牌数量的奥运会数据,我想将这些数据细分为他们在哪些项目中获得的互动数据 我只是不知道如何使用嵌套数据创建饼图,特别是如果键是可变的。我将包括甜甜圈图表的实现 var pie = d3.pie(); // color based on medal awarded // order: gold, silver, b
var pie = d3.pie();
// color based on medal awarded
// order: gold, silver, bronze
var color = d3.scaleOrdinal()
.range(['#e5ce0c', '#e5e4e0', '#a4610a']);
var arcs = d3.select(svg).selectAll("g.arc")
.data(pie(data))
.enter()
.append("g")
.attr("class", "arc")
.attr("transform", "translate(" + (w/2) + "," + ((h-25)/2) + ")");
arcs.append("path")
.attr("fill", function(d, i) {
return color(i);
})
.attr("d", arc)
.attr("stroke", "white")
.style("stroke-width", "0.5px")
.on('mouseover', function(d) {
d3.select(this).attr('opacity', .7);
})
.on('mouseleave', function(d) {
d3.select(this).attr('opacity', 1);
});
// title
d3.select(svg).append('text')
.attr('x', function(d) {
return ((w/2) - 85);
})
.attr('y', '20')
.text(function(d) {
return ('Medal breakdown for ' + country);
})
.attr('font-size', '16px');
arcs.append("text")
.attr("transform", function(d) {
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor", "middle")
.text(function(d) {
return d.value;
});
你能确认一下这是你的数据格式吗 请找到下面的代码,如果您有任何疑问,请告诉我 var w=400; var h=400; var r=h/2; var color=d3.scale.category20c; 风险值数据=[ {名称:足球,奖牌:1}, {名称:曲棍球,奖牌:2}, {名称:板球,奖牌:3}, {名称:网球,奖牌:4}, {名称:乒乓球,奖牌:5}, ]; var vis=d3。选择“图表”。appendsvg:svg.data[data]。attrwidth,w.attrheight,h.appendsvg:g.attrtransform,translate+r+,+r+; var pie=d3.layout.pie.valuefunctiond{return d.medal;}; //声明一个arc生成器函数 var arc=d3.svg.arc.outerRadiusr; //选择路径,使用圆弧生成器进行绘制 var arcs=vis.selectAllg.slice.datapie.enter.appendsvg:g.attrclass,slice; arcs.appendsvg:path .attrfill,functionad,i{ 返回颜色i; } .attrd,函数d{ //记录电弧发生器的结果,以显示其冷却程度: 返回弧; }; //添加文本 arcs.appendsvg:text.attrtransform,函数d{ d、 内半径=0; d、 外层=r; 返回translate+arc.centroidd+;}.attrtext锚,middle.text函数,i{ 返回数据[i].name;} ;
你能告诉我你使用的数据集的结构吗?它基本上只是一个运动->价值的列表,也就是那种类型的奖牌数量。我添加了一个格式来了解你的确切格式?如果没有,请在你的问题中张贴格式。因为这样很难理解,为什么需要使用d3.nest.Yup,这就是它的基本外观!我正在将它作为参数传递到函数中,但我不知道如何实际使用它。我已编辑了我的答案,如果有任何问题,请告诉我。