我正在使用Chartjs来显示折线图,这很好用:
// get line chart canvas
var targetCanvas = document.getElementById('chartCanvas').getContext('2d');
// draw line chart
var chart = new Chart(targetCanvas).Line(chartData);
但是当我尝试更改图表的数据时会出现问题 . 我通过使用新数据点创建图表的新实例来更新图形,从而重新初始化画布 .
这很好用 . 但是,当我将鼠标悬停在新图表上时,如果我碰巧检查了与旧图表上显示的点相对应的特定位置,则仍会触发悬停/标签,并且突然显示旧图表 . 当我的鼠标位于此位置时它仍然可见,并在离开该点时消失 . 我不希望显示旧图表 . 我想完全删除它 .
在加载新画布之前,我试图清除画布和现有图表 . 喜欢:
targetCanvas.clearRect(0,0, targetCanvas.canvas.width, targetCanvas.canvas.height);
和
chart.clear();
但到目前为止,这些都没有奏效 . 关于如何阻止这种情况发生的任何想法?
13 回答
我有很大的问题
首先我尝试了
.clear()
然后我尝试了.destroy()
并尝试将我的图表引用设置为null最后为我解决了什么问题:删除
<canvas>
元素,然后将新的<canvas>
重新上传到父容器我的具体代码(显然有一百万种方法可以做到这一点):
几小时前我遇到了同样的问题 .
“.clear()”方法实际上清除了画布,但(显然)它使对象保持活跃和反应 .
仔细阅读the official documentation,在"Advanced usage"部分,我注意到方法".destroy()",描述如下:
它实际上做了它声称的,它对我来说很好,我建议你尝试一下 .
这是唯一对我有用的东西:
我在这里遇到了同样的问题...我尝试使用destroy()和clear()方法,但没有成功 .
我在下一个方面解决了它:
HTML:
使用Javascript:
它对我来说很完美......我希望它有所帮助 .
This worked very well for me
使用 .destroy this来销毁创建的任何图表实例 . 这将清除Chart.js中存储到图表对象的任何引用,以及Chart.js附加的任何关联事件侦听器 . 必须在将画布重新用于新图表之前调用此方法 .
使用CanvasJS,这适用于清除图表和其他所有内容,也适用于您,允许您在其他地方处理前完全设置画布/图表:
我无法让.destroy()工作,所以这就是我正在做的事情 . chart_parent div是我希望画布显示的位置 . 我需要画布每次调整大小,所以这个答案是上面的一个扩展 .
HTML:
<div class="main_section" > <div id="chart_parent"></div> <div id="legend"></div> </div>
JQuery的:
当您创建一个新的chart.js画布时,会生成一个隐藏的新iframe,您需要删除画布和旧的iframe .
参考:https://github.com/zebus3d/javascript/blob/master/chartJS_filtering_with_checkboxs.html
我们可以更新Chart.js V2.0中的图表数据,如下所示:
对我来说,这工作:
Chart.js有一个错误:
Chart.controller(instance)
在全局属性Chart.instances[]
中注册任何新图表,并在.destroy()
上从此属性中删除它 .但是在图表创建时,Chart.js还会将
._meta
属性写入数据集变量:并且它不会在
destroy()
上删除此属性 .如果在不删除
._meta property
的情况下使用旧数据集对象,Chart.js将向._meta
添加新数据集而不删除以前的数据 . 因此,在每个图表的重新初始化时,数据集对象会累积所有先前的数据 .为了避免这种情况,请在调用
Chart.destroy()
之后销毁数据集对象 .这对我有用 . 在updateChart()的顶部添加对clearChart的调用