如何通过卸载和加载C3.js来交换数据

时间:2016-02-07 00:04:40

标签: c3.js

我正在尝试在C3.js图表​​中换出数据集。

我假设的代码将基于C3文档工作,如下所示:

chart.unload();
chart.load({ 
  columns: [
    ['data3', 100, 90, 80, 70, 60, 50]
  ] 
});

但这不起作用。您会注意到以下Plunkr上呈现的图形渲染不正确,所以我显然做错了:https://jsfiddle.net/7rfm9om9/

在C3图表中替换数据的惯用方法是什么?

2 个答案:

答案 0 :(得分:9)

根据c3文档,执行此操作的方法是使用加载函数的卸载参数。

chart.load({
  unload: true,
  columns: ['data1', 100]
});

在尝试使用.unload()和.load()时,渲染和动画存在问题。

本说明包含在.unload()文档中:

http://c3js.org/reference.html#api-unload

  

注意:如果您在卸载之后/之前很快调用[加载],请卸载   应该使用负载的参数。否则将不会呈现图表   正确的,因为动画的[取消]。

     

完成将在加载数据后调用,但它不会在渲染后调用。   这是因为渲染将在一些过渡后完成并且存在   加载和渲染之间有一段时间差。

根据.load()的文档:

http://c3js.org/reference.html#api-load

  

如果给出卸载,则在加载新数据之前将卸载数据。如果   如果给定,则将卸载所有数据。如果目标ID为   字符串或数组,将卸载指定的目标。

     

注意:如果需要卸载某些数据,则应使用卸载   同时。如果您在加载之后/之前很快调用unload API   卸载参数,由于取消,图表将无法正确呈现   动画。

格式将与以下代码段相符:

所有数据

chart.load({
  unload: true,
  columns: [
    ['data3', 100, 90, 80, 70, 60, 50]
  ] 
});

指定目标

chart.load({
  unload: ['data1', 'data2'],
  columns: [
    ['data3', 100, 90, 80, 70, 60, 50]
  ] 
});

的jsfiddle:

https://jsfiddle.net/d8g015n2/

答案 1 :(得分:8)

啊,似乎chart.unload()做了一些异步工作,如果你以同步方式立即调用chart.load(),将会破坏图形。

我通过在传递给chart.unload的{​​{1}}回调的函数中加载新数据来实现此目的。

done

工作小提琴:https://jsfiddle.net/1g5v1s24/1/