C3条形图未知数量的条形图

时间:2014-11-06 14:57:34

标签: javascript arrays c3.js

我正在使用C3.js来创建条形图。

我的情况是这样的:

我想收集X个数据并将其显示在我的图表中,为此我创建了以下脚本:

    $.ajax({
    type: 'POST',
    url: '/AcademyStat/academy_module_user_report',
    dataType: 'json',
    data: {
        request: 'ajax',
        team_id: team_id,
        module_id: module_id
    },
    success: function (data)
    {
        if(data != null)
        {
            for (var i = 0; i < data.length; i++)
            {
                var add_data = [data[i]['name'], data[i]['score']]
                char_data.push(add_data);
            }
            var chart = c3.generate({
                bindto: '#score_chart',
                data: {
                    columns: [
                        char_data

                    ],
                    type: 'bar'
                }
            });
        }
    }
});

从上面的示例中可以看出,我循环遍历数据然后将其添加到数组中,直到我有一个数组数组(未知数量的数据)。

然而,当我在浏览器中运行时,我在console

中收到以下错误
    Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 286.6,NaN L286.6,NaN L531.4,NaN L531.4,NaN z" d3.min.js:5
Error: Invalid value for <path> attribute d="M 1102.6,NaN L1102.6,NaN L1347.3999999999999,NaN L1347.3999999999999,NaN z

但是,如果我使用方法pop,数据显示正常。 pop();的唯一问题是我必须知道我的char_data数组有多少个数组,而且我不可能知道。

有没有人尝试类似的东西或知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

看起来您要将图表columns设置为数组columns: [ [ ['name', 'score'] ] ]内的数组

columns: [ char_data ]更改为columns: char_data

$.ajax({
    type: 'POST',
    url: '/AcademyStat/academy_module_user_report',
    dataType: 'json',
    data: {
        request: 'ajax',
        team_id: team_id,
        module_id: module_id
    },
    success: function (data) {
        if (data != null) {
            for (var i = 0; i < data.length; i++) {
                var add_data = [data[i]['name'], data[i]['score']]
                char_data.push(add_data);
            }
            var chart = c3.generate({
                bindto: '#score_chart',
                data: {
                    columns: char_data,
                    type: 'bar'
                }
            });
        }
    }
});