c3js中的数据聚合

时间:2016-07-15 08:48:34

标签: json c3.js

是否可以选择汇总C3图表中的数据?当JSON包含具有相同类别的多个数据元素时,数据将被绘制为图表中的多个点,其中应将其聚合并显示为图表中的单个点。 随附的是C3图表和预期的图表格式。 在示例中:"名称1"在上传时显示单点300,其中作为离子C3,它显示一个点在200,另一个在100显示相同。

使用的代码:

#gallery-container li p {display:none;}

以上代码的输出: enter image description here

预期产出:

enter image description here

1 个答案:

答案 0 :(得分:1)

据我所知,没有内置到c3中。您可以使用d3的嵌套运算符来聚合json数据,然后将其传递给c3。

var json = [
            {name: 'name1', upload: 200, download: 200, total: 400},
            {name: 'name1', upload: 100, download: 300, total: 400},
            {name: 'name2', upload: 300, download: 200, total: 500},
            {name: 'name3', upload: 400, download: 100, total: 500},
          ];

    var agg = function (json, nestField) {
        var nested_data = d3.nest()
            .key(function(d) { return d[nestField]; })
            .rollup(function(leaves) { 
                // Work out the fields we're not nesting by
                var keys = d3.merge (leaves.map (function(leaf) { return d3.keys(leaf); }));
                var keySet = d3.set(keys);
                keySet.remove (nestField);
                var dataFields = keySet.values();

                // total these fields up
                // console.log(leaves, dataFields); // just for testing
                var obj = {};
                dataFields.forEach (function (dfield) {
                    obj[dfield] = d3.sum(leaves, function(d) {return d[dfield];});
                });
                return obj; 
            })
            .entries(json);

        // return to original json format
        var final_data = nested_data.map (function(nestd) {
            nestd.values[nestField] = nestd.key;
            return nestd.values;
        });

        return final_data;
    };

    var chart = c3.generate({
        bindto:'#png-container',
        data: {
          json: agg(json, "name"),
          keys: {
            x: 'name', // it's possible to specify 'x' when category axis
            value: ['upload', 'download'],
          },
          groups: [
            ['name']
          ]
        },
        axis: {
          x: {
            type: 'category'
          }
        }
    });

https://jsfiddle.net/8uofn7pL/2/

哎呀,与错误的小提琴相关联