当前位置: 首页 > 知识库问答 >
问题:

销毁chart.js条形图以重绘同一中的其他图形

郑哲彦
2023-03-14

我正在使用Chart.js库绘制条形图,它工作正常,但现在我想销毁条形图,并在同一画布中绘制线条图。我尝试了以下两种方法来清除画布:

var grapharea = document.getElementById("barChart").getContext("2d");

grapharea.destroy();

var myNewChart = new Chart(grapharea, { type: 'radar', data: barData, options: barOptions });

第二种方式:

var grapharea = document.getElementById("barChart").getContext("2d");

grapharea.clear();

var myNewChart = new Chart(grapharea, { type: 'radar', data: barData, options: barOptions });

我说得对吗?OnButtonClick我调用这个函数,它使用相同的画布。

共有3个答案

戴原
2023-03-14

对于ChartJS v2.x,可以使用update()更新图表数据,而无需显式销毁和创建画布。

var chart_ctx = document.getElementById("chart").getContext("2d");

var chart = new Chart(chart_ctx, {
    type: "pie",
    data: {},
    options: {}
});

$.ajax({
    ...
}).done(function (response) {
    chart.data = response;
    chart.update();
});
赵鸿畴
2023-03-14

每次调用图表后都要移除画布,这对我很有用

$("canvas#chartreport").remove();
$("div.chartreport").append('<canvas id="chartreport" class="animated fadeIn" height="150"></canvas>');
var ctx = document.getElementById("chartreport").getContext("2d");
chartreport= new Chart(ctx, { .... });
颛孙品
2023-03-14

为了能够在同一画布上绘制另一张图表,正确的方法是.destroy()。必须在先前创建的图表对象上调用它。您也可以对两个图表使用相同的变量。

var grapharea = document.getElementById("barChart").getContext("2d");

var myChart = new Chart(grapharea, { type: 'bar', data: barData, options: barOptions });

myChart.destroy();

myChart = new Chart(grapharea, { type: 'radar', data: barData, options: barOptions });

直接从文档中(原型方法下):

.销毁

使用此选项可以销毁创建的任何图表实例。这将清除存储在chart.js中的对chart对象的任何引用,以及chart.js附加的任何关联事件侦听器。必须在画布重新用于新图表之前调用此函数。

// Example from the docs
var myLineChart = new Chart(ctx, config);
// Destroys a specific chart instance
myLineChart.destroy();

它明确指出,必须调用此方法,才能将画布重新用于新图表。

.clear()在后面的同一节中还提到了函数“将清除图表画布。在动画帧之间广泛使用,但您可能会发现它很有用。”调用此方法后,图表将处于活动状态,因此这不是要调用的方法,如果您想为一个全新的图表重复使用画布。

不过,老实说,在像您这样的情况下,我经常使用容器div来包装我的canvas,每当我需要创建新图表时,我都会在div中放置一个新的canvas元素。然后,我将这个新创建的画布用于新图表。如果您曾经遇到过奇怪的行为,可能与在当前图表之前占据画布的图表有关,也要记住这种方法。

 类似资料:
  • 我使用chart.js在我的网页上有一个BarChart。 我在其中添加了两个数据点 现在我想要更新那些条A和B,而不是删除它们并再次添加它们(我已经想好了如何做到这一点)。我想让它们垂直移动以适应它们的新值,但我无法找到如何访问图表中已经存在的数据。 没有什么比得上 其中第一个值将是存储数据的索引(F.E.)。 我该怎么做呢?

  • 在自定义图表上工作,可以根据数据提供的值确定条形图或水平条形图中的条形图的厚度,而不是使用barThickness或barPer百分比/类别百分比的预设宽度。 目标:我可以用包含值和

  • null 约束条件:N,M<=10^6,并且图没有自循环和圈。

  • 我刚刚开始使用Chart.js,我很快就变得非常沮丧。我有我的堆叠条形图工作,但是我不能让点击“事件”工作。 我在图表中找到了对GitHub的评论。js声明使用函数<code>getBarsAtEvent 我在画布元素上设置了一个事件监听器(正确的方式): ...然而在我的< code>handleClick函数中,< code > chart . getbarsatevent 是未定义的! 现在

  • 我使用的是Chart.js2.5.0版本,需要知道是否有任何方法可以隐藏分组堆叠条形图中每组的空条?图表数据集中的某些数据值可以为空。 这里是我想要的:组合图表类型(分组和堆叠) 小提琴:https://jsfidle.net/q_sabawoon/atlxlg7x/ 请帮帮忙。

  • 我在超文本标记语言页面中包含了一个堆叠条形图(带有Chart.js库),可以让用户可视化一些数据。这些数据会随着用户的选择而改变,启用此onClick功能的Javascript函数是: 其中函数createData创建JSON对象(带有标签和数据集)以传递给图形(工作正常),函数makeGrafico(): 获取用于显示的参数的名称,以及上一个函数的JSON对象。 当我第一次单击一个程序时(具有o