chart.js 加载全新的数据

IT技术 javascript chart.js
2021-02-27 17:42:04

API forchart.js允许编辑加载到其中的数据集的点,例如:

.update( )

在您的 Chart 实例上调用 update() 将使用任何更新的值重新渲染图表,允许您编辑多个现有点的值,然后在一个动画渲染循环中渲染这些值。

.addData( valuesArray, label )

在 Chart 实例上调用 addData(valuesArray, label) 传递每个数据集的值数组,以及这些点的标签。

.removeData( )

在 Chart 实例上调用 removeData() 将删除图表上所有数据集的第一个值。

所有这些都很棒,但我不知道如何加载一个全新的数据集,清除旧的。文档似乎没有涵盖这一点。

6个回答

我在这方面遇到了很大的问题

首先我尝试.clear()然后我尝试.destroy()并尝试将我的图表引用设置为空

最终为我解决的问题是:删除<canvas>元素,然后将新元素重新附加<canvas>到父容器


有一百万种方法可以做到这一点:

var resetCanvas = function () {
  $('#results-graph').remove(); // this is my <canvas> element
  $('#graph-container').append('<canvas id="results-graph"><canvas>');
  canvas = document.querySelector('#results-graph'); // why use jQuery?
  ctx = canvas.getContext('2d');
  ctx.canvas.width = $('#graph').width(); // resize to parent width
  ctx.canvas.height = $('#graph').height(); // resize to parent height

  var x = canvas.width/2;
  var y = canvas.height/2;
  ctx.font = '10pt Verdana';
  ctx.textAlign = 'center';
  ctx.fillText('This text is centered on the canvas', x, y);
};
这个答案有效,但我发现 destroy 在最新版本中也有效。在此帖子上推荐 - github.com/nnnick/Chart.js/issues/559
2021-05-04 17:42:04
这将有助于清空图形容器 div 以删除旧的 iframe $('#results-graph').remove(); $('#graph-container').empty(); $('#graph-container').append('<canvas id="results-graph"><canvas>');
2021-05-07 17:42:04

你需要销毁:

myLineChart.destroy();

然后重新初始化图表:

var ctx = document.getElementById("myChartLine").getContext("2d");
myLineChart = new Chart(ctx).Line(data, options);
就像这样使用它 if(window.myLine){ window.myLine.destroy(); 或 if(myLineChart){ myLineChart.destroy(); }
2021-05-16 17:42:04
可以确认销毁然后重新初始化不会导致任何闪烁,看起来数据点是动态更新的
2021-05-19 17:42:04

使用 Chart.js V2.0,您可以执行以下操作:

websiteChart.config.data = some_new_data;
websiteChart.update();
正是操作所要求的。
2021-04-25 17:42:04
当我这样做时chart.config.data = newData,我有这个错误:TypeError: undefined is not an object (evaluating 'i.data.datasets.length') 有人有同样的问题吗?
2021-05-03 17:42:04

这是一个旧线程,但在当前版本中(截至 2017 年 2 月 1 日),很容易替换在 chart.js 上绘制的数据集:

假设您的新 x 轴值在数组 x 中,y 轴值在数组 y 中,您可以使用以下代码来更新图表。

var x = [1,2,3];
var y = [1,1,1];

chart.data.datasets[0].data = y;
chart.data.labels = x;

chart.update();
非常感谢,伙计!浪费了一整天。终于偶然发现了你的答案。谢谢你。
2021-04-28 17:42:04
这对我很有帮助并且对我有用。即使只是使用 [] 设置一个空数据集,然后执行新的“推送”也可以解决问题。
2021-05-05 17:42:04

ChartJS 2.6 支持数据引用替换(请参阅update(config) 文档中的注释)。所以当你有你的图表时,你基本上可以这样做:

myChart.data.labels = ['1am', '2am', '3am', '4am'];
myChart.data.datasets[0].data = [0, 12, 35, 36];
myChart.update();

它不会执行您通过添加点获得的动画,但会为图形上的现有点设置动画。