Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用d3.nest()中的嵌套数据创建圆环图_Javascript_D3.js - Fatal编程技术网

Javascript 使用d3.nest()中的嵌套数据创建圆环图

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

我已经使用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
         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))