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

Javascript ChartJS 永久更新图表和画布

鄢雅畅
2023-03-14

我在chartJS中制作了一个图表,我想根据用户从下拉列表中选择的内容使用新数据更新它,使用相同的画布。问题是当我执行更新功能时,图表会用新数据更新,但过一会儿又会回到原始图表。我该如何解决这个问题?下面是代码,感谢大家的帮助:

/* Original Chart */
var ctx3 = document.getElementById("canvas3").getContext("2d");

var canvas3 = new Chart(ctx3, {
    type: 'line',
    data: {
        labels: stationRentalsLabels,
        datasets: [{
            label: 'Wypożyczenia',
            fillColor: "rgba(220,280,220,0.5)",
            strokeColor: "rgba(220,220,220,1)",
            backgroundColor: "rgba(153,255,51,0.4)",
            data: stationRentalsData
        }]
    }
});

/* event listener on drop-down list, when triggered, update chart */
select.addEventListener('change', function() {
    updateChart()
});

/* Update Chart */
function updateChart() {
    var stationRentalsHoursTemp = [];
    var stationRentalName = [];

    var determineHour = selectNumber.options[selectNumber.selectedIndex].innerHTML;
    for (var i = 0; i < stationRentalsHours.length; i++) {
        if (determineHour == stationRentalsHours[i]) {
            stationRentalsHoursTemp.push(stationRentalsData[i])
            stationRentalName.push(stationRentalsLabels[i]);
        }
    }

    /* Updated Chart */
    var ctx3 = document.getElementById("canvas3").getContext("2d");
    var canvas3 = new Chart(ctx3, {
        type: 'line',
        data: {
            labels: stationRentalName,
            datasets: [{
                label: 'Wypożyczenia',
                fillColor: "rgba(220,280,220,0.5)",
                strokeColor: "rgba(220,220,220,1)",
                backgroundColor: "rgba(153,255,51,0.4)",
                data: stationRentalsHoursTemp
            }]
        }
    });
}

共有1个答案

贺飞星
2023-03-14

您正在与之前相同的 div 中创建新的更新函数图表,但为了做到这一点,您需要在调用 updateChart 函数之前通过调用销毁函数来销毁图表的上一个实例。

canvas3.destroy()

解决问题的另一种方法是,当通过调用 update 函数(不初始化新图表)调用 updateChart 函数时,替换数据而不是图表本身。

function updateChart() {
    var stationRentalsHoursTemp = [];
    var stationRentalName = [];

    var determineHour = selectNumber.options[selectNumber.selectedIndex].innerHTML;
    for (var i = 0; i < stationRentalsHours.length; i++) {
        if (determineHour == stationRentalsHours[i]) {
            stationRentalsHoursTemp.push(stationRentalsData[i])
            stationRentalName.push(stationRentalsLabels[i]);
        }
    }
    // just update the label and dataset not the entire chart
    canvas3.data.labels = stationRentalName;
    canvas3.data.datasets[0].data = stationRentalsHoursTemp;
    canvas3.update();

}

 类似资料:
  • 我正在使用chart.js在html页面中创建多个图表,并且在Windows加载之后,图表将以每秒的速度动态更新,并使用新的数据值。我正在使用chart.js update()函数处理更新。所有创建的图表都存储在全局数组中,然后获取这些图表进行更新。 当我第一次打开html页面时,每秒都会更新图形(显示实时测量数据),但当我移动到webapp中的另一个子页面,然后返回到图形应该所在的页面时,所有画

  • 问题内容: 我想将“:/ home / me / play /”值添加到PATH ,以安装Play!框架。 所以我运行了这个命令: 有效。但是在我下次检查时,该值又变回了原来的值。 所以我想我没有“保存”新值,对吗? 你是怎样做的? 问题答案: 加 给你并执行 为了立即反映对您当前终端实例的更改。

  • 问题内容: 如果我从命令行()执行然后执行,我会看到此字符串已添加到PATH。如果我关闭并打开命令行,则该新字符串不在PATH中。 将来如何从命令行永久更新PATH,而不仅限于当前进程? 我不想通过转到“系统属性”→“高级”→“环境变量”并在那里更新PATH来执行此操作。 问题答案: 有关如何执行此操作的文档可以在MSDN上找到。关键摘录是这样的: 要以编程方式添加或修改系统环境变量,请将它们添加

  • 问题内容: 这将使用 临时的 302 HTTP状态代码重定向请求: 但是是否可以使用 永久的 301 HTTP状态代码重定向它? 问题答案: 您需要手动设置响应状态和标题。 将状态设置为之前将无效,否则将其设置为之后。

  • 问题内容: 如何使django开发服务器永久运行?这样我退出shell时就不会停止。 问题答案: 一个简单的方法是运行: 现在按,然后按退出此屏幕。 这将在屏幕中创建服务器,然后将其分离。这样,你可以简单地返回并输入: 你可以再次控制服务器并查看发生了什么。

  • Jekyll 支持以灵活的方式管理你网站的链接,你可以通过 Configuration 或 YAML 头信息 为每篇文章设置永久链接。你可以随心所欲地选择内建链接格式,或者自定义链接格式。默认配置为 date。 永久链接的模板用以冒号为前缀的关键词标记动态内容,比如 date 代表 /:categories/:year/:month/:day/:title.html。 模板变量 变量 描述 yea