Javascript 使用d3.nest()中的嵌套数据创建圆环图
我已经使用d3.nest创建了嵌套数据,并获得了{java:16,other:17,php:21,py:17,cpp:16,js:13}Javascript 使用d3.nest()中的嵌套数据创建圆环图,javascript,d3.js,Javascript,D3.js,我已经使用d3.nest创建了嵌套数据,并获得了{java:16,other:17,php:21,py:17,cpp:16,js:13} <pre> let data = []; // Fetch json data d3.json('/load_data', (d) => { return d; }).then((d) => { // Redefine data
<pre>
let data = [];
// Fetch json data
d3.json('/load_data', (d) => {
return d;
}).then((d) => {
// Redefine data
data = d['users'];
let nested_data = d3.nest()
.key((d)=>{return d.prog_lang;})
.rollup((v)=> {
return v.length;
})
.object(data);
var jsonPie=JSON.stringify(nested_data);
console.log(jsonPie);
});
var totals=[{
title:"py",
value:14,
all: 100
},
{
title: "java",
value: 13,
all: 100
},
{
title:"php",
value: 29,
all:100
},
{
title:"cpp",
value:16,
all:100
},
{
title:"other",
value: 15,
all: 100
},
{
title:"js",
value:13,
all:100
}
];
var width =300;
var height=300;
var radius=Math.min(width, height)/2;
var donutWidth=50;
var color=d3.scaleOrdinal()
.range(["#1b7688","#1b7676","#f9d057","#f29e2e","9b0a0a","#d7191c"])
var svg = d3.select('#donutChart')
.append('svg')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', 'translate(' + (width / 2) + ',' + (height / 2) + ')');
var arc = d3.arc()
.innerRadius(radius - donutWidth)
.outerRadius(radius);
var pie = d3.pie()
.value(function (d) {
return d.value;
})
.sort(null);
var path = svg.selectAll('path')
.data(pie(totals))
.enter()
.append('path')
.attr('d', arc)
.attr('fill', function (d, i) {
return color(d.data.title);
})
.attr('transform', 'translate(0, 0)')
</pre>
下一步我需要创建一个油炸圈饼图表
我已经为我的甜甜圈图表创建了大纲,但我不知道如何阅读上述数据并创建甜甜圈图表
忽略var总计,因为它是我手动写入数据。。。我已经从嵌套中获得了数据,输出如上图所示。。。我真的被困在我的js和D3技能都很弱
当我用jsonPie替换总计时,我得到一个引用错误 我不确定您的源数据,但如果在nest函数中使用而不是.object,您将得到一个数组,其格式如下所示:
let nested_data = d3.nest()
.key((d)=>{return d.prog_lang;})
.rollup((v)=> {
return v.length;
})
.object(data);
因此,您的代码将从此处更改:
let nested_data = d3.nest()
.key((d)=>{return d.prog_lang;})
.rollup((v)=> {
return v.length;
})
.entries(data);
为此:
svg.selectAll('path')
.data(pie(nested_data))
然后您可以简单地将该数组传递给饼图,如下所示:
svg.selectAll('path')
.data(pie(nested_data))