在物联网、监控平台、金融看盘、实时分析等系统中,数据是实时产生的。如何把这些实时数据以动画、连贯、可交互的方式呈现,是现代前端可视化的核心挑战。

Highcharts 提供强大而优雅的“动态数据更新”能力,不仅可以手动更新单点/多点数据,还能通过定时器自动实时推送刷新图表

应用场景

应用领域

示例

IoT/智能制造

传感器温湿度实时曲线

股票金融

实时K线/分时图

网络安全

每秒入侵/请求数据监控

系统运维

CPU/内存/硬盘使用率变化

环境监测

实时气象/PM2.5等数据

实战代码:每秒推送新数据点

<div id="container"></div><script src="https://code.highcharts.com/highcharts.js"></script><script>Highcharts.chart('container', {  chart: {    type: 'spline',    animation: Highcharts.svg, // 支持动画    marginRight: 10,    events: {      load: function () {        // 启动定时器,每秒新增一个点        const series = this.series[0];        setInterval(function () {          const x = (new Date()).getTime(); // 当前时间          const y = Math.random() * 100;    // 模拟数据          series.addPoint([x, y], true, true);        }, 1000);      }    }  },  title: {    text: '实时数据曲线图'  },  xAxis: {    type: 'datetime',    tickPixelInterval: 150  },  yAxis: {    title: {      text: '数值'    },    plotLines: [{      value: 0,      width: 1,      color: '#808080'    }]  },  tooltip: {    formatter: function () {      return '<b>' + Highcharts.dateFormat('%H:%M:%S', this.x) + '</b><br/>' +             Highcharts.numberFormat(this.y, 2);    }  },  legend: { enabled: false },  series: [{    name: '随机数据',    data: (function () {      // 初始填充20个点      const data = [], time = (new Date()).getTime();      for (let i = -19; i <= 0; i++) {        data.push({ x: time + i * 1000, y: Math.random() * 100 });      }      return data;    })()  }]});</script>

核心方法说明

方法

说明

chart.series[0].addPoint()

动态添加数据点

chart.series[0].setData()

重设整个数据列

chart.redraw()

手动触发重绘(不常用)

chart.update()

实时更新配置(如改颜色/标题等)

 实用技巧与优化建议

  • ✅ 设置 addPoint(..., true, true) 可实现滚动更新,保持点数恒定(如20个)

  • ⏱ 使用 setInterval 搭配 AJAX/WebSocket 可实现与后端联动实时更新

  • ⚡ 搭配 Boost 模块适用于每秒百万点的工业级流数据展示

  • 📱 移动端推荐减缓刷新频率(如 2s 一次)避免性能压力

多种动态更新方式支持

方式

描述

定时器模拟更新

适合演示/原型开发

AJAX轮询

简单易集成,适合中等刷新频率

WebSocket 长连接

高并发/高频率数据推送

MQTT 协议

工业物联网应用常见方案

RESTful 接口手动刷新

按需手动触发,如“刷新数据”按钮

常见问题解答

Q:图表刷新时会闪烁吗?
A:不会,Highcharts 自带动画过渡,刷新过程顺滑流畅。

Q:是否可以多图联动更新?
A:可以,多个图表可通过 JS 同步推送数据,实现整体联动(如上下分区图表)。

Q:是否支持数据点超过上限自动删除旧点?
A:是的,addPoint(..., true, true) 中最后一个参数即表示“移除最旧点”。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐