Chart.js 入门:响应式图表与动态数据更新实战

作者:窗边听雨时间:2026-10-29 16:12:01浏览:292

Chart.js 是基于 HTML5 Canvas 的轻量级开源图表库,支持曲线、柱状等六种图表类型。本文介绍如何配置全局与局部选项实现响应式布局,并通过 removeData 和 addData 方法演示实时数据的动态添加与移除,适用于股票等高频数据场景。

Chart.js 概述与核心特性

入门基础

Chart.js 是一款基于 HTML5 的开源图表库,能够以简洁的方式生成美观的可视化图表。

其核心特性涵盖以下方面:

1、提供 6 种图表类型:折线图、柱状图、饼图、雷达图、极坐标区域图和环形图。 2、基于 HTML5 标准开发,兼容包括 IE7/8 在内的各类主流浏览器。 3、独立运行,不依赖其他第三方库,文件体积仅 4.5KB,且支持高度定制。

Chart.js 是一个轻量级、灵活且响应式的 HTML5 Canvas 图表库。内置六种图表类型,每种均配备丰富的自定义选项。若内置类型不足,开发者还可创建自定义图表类型。

Chart.js 六种图表类型的代码总大小仅为 11KB,并经过 gzip 压缩。该库采用模块化设计,允许仅引入所需的图表类型以进一步减小体积。可通过 cdnjs 链接引入该库。

JavaScript


<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"></script>

图表配置与响应式设置

可用配置项

从工具提示(tooltip,即鼠标悬停时显示的提示信息)到动画效果,Chart.js 允许修改图表的绝大多数属性。本节将修改部分设置以展示 Chart.js 的构建过程,起始代码如下:

XHTML


<canvas id="canvas"></canvas>

首先创建一个折线图。为使图表具有实际意义,需配置几个基本选项。折线图需要标签数组和数据集。标签将显示在 X 轴上。此处模拟了一些数据,数据被分配到一个数组中,每个数据集包含填充颜色、线条颜色和点样式。

在此示例中,将 fillColor 设置为透明。若不设置 fillColor,默认值为黑色或灰色。其他颜色属性同理,支持 RGBA、RGB、hex 或 HSL 格式,与 CSS 定义方式一致。

JavaScript


var lineData = {
 labels: ['Data 1', 'Data 2', 'Data 3', 'Data 4', 
      'Data 5', 'Data 6', 'Data 7'],
 datasets: [{
  fillColor: 'rgba(0,0,0,0)',
  strokeColor: 'rgba(220,180,0,1)',
  pointColor: 'rgba(220,180,0,1)',
  data: [20, 30, 80, 20, 40, 10, 60]
 }, {
  fillColor: 'rgba(0,0,0,0)',
  strokeColor: 'rgba(151,187,205,1)',
  pointColor: 'rgba(151,187,205,1)',
  data: [60, 10, 40, 30, 80, 30, 20]
 }]
}

设置全局选项

代码中设置了若干全局值。animationSteps 决定动画持续时间。可根据需要修改更多选项,如 scaleLineColor 和 scaleIntegersOnly。建议查阅 Chart.js 文档以了解库中提供的其他选项。

JavaScript


Chart.defaults.global = {
 animationSteps : 50,
 tooltipYPadding : 16,
 tooltipCornerRadius : 0,
 tooltipTitleFontStyle : 'normal',
 tooltipFillColor : 'rgba(0,160,0,0.8)',
 animationEasing : 'easeOutBounce',
 scaleLineColor : 'black',
 scaleFontSize : 16
}

设置特定图表选项

除了全局选项,还有针对特定图表类型的配置选项。在折线图中,设置此类选项如下,供参考:

JavaScript


Chart.defaults.global = {
animationSteps : 50,
tooltipYPadding : 16,
tooltipCornerRadius : 0,
tooltipTitleFontStyle : 'normal',
tooltipFillColor : 'rgba(0,160,0,0.8)',
animationEasing : 'easeOutBounce',
scaleLineColor : 'black',
scaleFontSize : 16
}

Chart.js 生成的图表默认非响应式。将 responsive 设置为 true 可使其变为响应式图表。若需所有图表均为响应式,建议设置全局值,如下所示:

JavaScript


Chart.defaults.global.responsive = true;

以下是折线图的示例效果:


See the Pen Chart.js Responsive Line Chart Demo by SitePoint (@SitePoint) on CodePen.

动态数据的实时更新

动态数据的增加与移除

有时需要展示实时变化的数据,股票市场是典型应用场景。本节将创建柱状图,并在动态删除数据的同时增加新数据。使用随机数据,通过柱状图展示。大部分代码与前例相似。在拥有 HTML(与前例相同)后,添加 JavaScript 代码。

首先编写代码将动态数据填充至图表。使用 function 表达式生成随机值,并赋值给变量 dData。这些值在需要变化时提供随机数据。与前例一样,创建标签数组和数据集,并设置任意 fillColor。

JavaScript


var dData = function() {
 return Math.round(Math.random() * 90) + 10;
};
var barData = {
 labels: ['dD 1', 'dD 2', 'dD 3', 'dD 4',
      'dD 5', 'dD 6', 'dD 7', 'dD 8'],
 datasets: [{
  fillColor: 'rgba(0,60,100,1)',
  strokeColor: 'black',
  data: [dData(), dData(), dData(), dData(),
      dData(), dData(), dData(), dData()]
 }]
}

接下来编写代码以删除和添加柱状图数据。初始化 index 为 11,使用两个方法:removeData() 和 addData(valuesArray, label)。调用实例的 removeData() 方法删除所有数据集的第一个值。在 barChartDemo 示例中,移除数据集的第一个值。调用 addData() 传递标签数组值,在图表末尾增加新数据节点。以下代码每 3 秒更新一次图表。

JavaScript


var index = 11;
var ctx = document.getElementById('canvas').getContext('2d');
var barDemo = new Chart(ctx).Bar(barData, {
 responsive: true
});
setInterval(function() {
 barDemo.removeData();
 barDemo.addData([dData()], 'dD ' + index);
 index++;
}, 3000);

另一种更新图表数值的方法是直接设置数值。在以下示例中,第一行将第一个数据集的第二个柱形数值设为 60。若此时更新,柱形将通过动画将当前值变为 60。

JavaScript


barDemo.datasets[0].bars[2].value = 60;
barDemo.update();

以下是柱状图的示例(由 SitePoint 在 CodePen 上创建):


See the Pen Chart.js Responsive Bar Chart Demo by SitePoint (@SitePoint) on CodePen.

总结与建议

结论

本教程涵盖了 Chart.js 的一些重要功能。第一个示例展示了全局设置的使用,同时 Chart.js 也为每种图表类型提供了专属的自定义设置。若当前可用图表无法满足需求,还可创建自定义图表类型。建议查阅文档,深入了解该库的功能边界。

作者最新文章