C3js动态加载未知列

时间:2017-09-26 08:54:05

标签: javascript c3.js

我有一张带有c3js的空时间表图表,并且想要加载"来自未知地图的动态列。

初始化

.caffemodel

我添加了x轴值和动态生成的地图以及所有数据:

var chart = c3.generate({
    data: {
        x: 'ts',
        xFormat: null, // For millis
        columns: []
    },
    axis: {
        x: {
            type: 'timeseries',
            tick: {
                format: '%Y-%m-%d'
            }
        }
    },
    line: { // For enable null values in series (gaps in charts))
        connectNull: false 
    }
});

所以想法是从var tsData = ['ts'].concat(VALUES_FROM_ANOTHER_FUNCTION); periodPowerChart.load({ columns: [ tsData ] }); // opMode looks like [{"1": [null, null, 0, 3, 5]}, {"2": [2, 4, null, null, null]}] for (key in opMode) { chart.load({ columns: [ [key].concat(opMode[key]) ] }) } 加载数据。在我得到的第一次迭代中:

opMode

3个阵列(ts," 1"和" 2"具有相同数量的元素)。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您正在向columns参数中插入无效的数据格式。 您应该在列中提供类似下面的内容。

var columnsData = [[
  "ts",
  "2013-01-01",
  "2013-01-02",
  "2013-01-03",
  "2013-01-04",
  "2013-01-05"
],
[
  "data1",
  null,
  null,
  0,
  3,
  5
],
[
  "data2",
  2,
  4,
  null,
  null,
  null
]];

我更新了动态列插入逻辑,使数据看起来如上所示。 这是代码。

//opMode should look like below with time data.
var opMode = [{
  "ts": ['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05']
}, {
  "data1": [null, null, 0, 3, 5]
}, {
  "data2": [2, 4, null, null, null]
}];

opMode.forEach(function(obj, index) {
  var key = Object.keys(obj)[0];
  var data = [key];

  data = data.concat(obj[key]);

  chart.load({
    columns: [
      data
    ]
  });

});

您可以参考此示例并使用它来获得一个好主意 http://c3js.org/samples/timeseries.html

答案 1 :(得分:0)

只是为了帮助别人采用另一种方法。

在我的情况下,问题与加载多次数据有关。只需将单个数组中的所有列数据连接起来就可以解决问题:

var columnsData = [];
var tsData = ['ts'].concat(VALUES_FROM_ANOTHER_FUNCTION);
columnsData.push(tsData);
for (key in opMode) {
    columnsData.push([key].concat(opMode[key]));
}
chart.load({
    columns: columnsData
});