echarts 中通过 shift() 和 push() 实时更新数据

在数据分析大屏开发中,原本未要求实时更新,后有此需求。开发使用了 ECharts,且是基于 Vue 进行编写的,主要围绕前端技术解决大屏实时更新问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据分析大屏开发时一般都会用到echarts,本来没说还要实时更新,后来要求说要实时更新
这里我是用 vue 写的

首先 从 echarts 上复制的代码块下来 放到  图表函数中(下面的一系列操作都是在该函数中进行)*
 let option = {
        // 标题
        title: {
          text: "空气温度与时间的关系图",
          left: "center"
        },
        // 提示框
        tooltip: {
          trigger: "axis"
        },
        // 是否显示工具栏组件
        toolbox: {
          show: true,
          feature: {
            mark: { show: true },
            dataView: { show: true, readOnly: false }, // 数据视图工具,可以展示当前图表所用的数据,编辑后可以动态更新
            magicType: { show: true, type: ["line", "bar"] }, // 动态类型切换
            restore: { show: true }, // 重置
            saveAsImage: { show: true } // 保存图片
          }
        },
        calculable: true,
        // x 轴 表示
        xAxis: {
          data: []
        },
        // y 轴 表示
        yAxis: [
          {
            type: "value",
            axisLabel: {
              formatter: "{value} °C"
            }
          }
        ],
        series: [
          // 最高温
          {
            name: "当前气温",
            type: "line",
            data: []
          }
        ]
      };

 **//  初始化 echarts 实例**
      var myChart = this.$echarts.init(document.getElementById("空气温度"));
   **//  使用刚指定的配置项和绘制图表,数据为 option**
      myChart.setOption(option);
      
  **//  数据加载完之前 显示一段简单 的 loading 动画**
      myChart.showLoading();

**//从后台获取数据(这里使用axios)**
var dataX = []; // 实际存放 x 轴的 值
      var dataV = []; // 实际存放 y 轴的 值
      **// 从服务器获取数据**
      this.$axios
        .get("meteorological/tem")
        .then(res => {
          // 判断 是否从服务器中获取到了数据
          if (res) {
            for (var i = 0; i < res.data.length; i++) {
              // 拿到数据后 遍历拿到 对应的时间给 x 轴
              dataX.push(res.data[i].time.slice(11));
              // 拿到数据后, 遍历拿到对应的 温度 给 y 轴
              dataV.push(res.data[i].value);
            }
            **// 隐藏加载动画**
            myChart.hideLoading();
            // 加载数据图表
            myChart.setOption({
              xAxis: {
                data: dataX
              },
              series: [
                {
                  data: dataV
                }
              ]
            });
          }
        })
        .catch(err => {
          console.log(err);
        });

**// 实时更新****(每四秒添加数据)**
      let timeTicket;
      clearInterval(timeTicket);
      // 设置定时器,没四秒更新一次数据
      timeTicket = setInterval(function() {
        *// 获取到图表的  option*
        option = myChart.getOption();
        let arr = option.series[0].data;
        if (arr.length == 30) {
          arr.shift(); *// 从队头删除数据*
        }
        arr.push(Math.round(Math.random() * 5 + 25)); *// 从对尾添加数据*
        *// 加载数据 图表*
        myChart.setOption(option);
      }, 4000);
ECharts 是百度开源的一款基于 JavaScript数据可视化库,支持多种类型的图表展示,并提供了一系列易于使用的配置选项。MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传递协议,广泛应用于物联网设备通信。 将 ECharts 整合到 MQTT 系统中主要是为了实时更新显示来自 MQTT 的数据变化。下面是一个基本的步骤概述: ### 步骤 1: 设置 MQTT 客户端 首先,需要使用 MQTT 协议创建一个客户端连接到 MQTT 服务器。例如,可以使用 Paho MQTT 客户端库(Python、JavaScript 等语言都有相应的版本),通过订阅特定的主题来接收来自 IoT 设备的数据。 ```javascript // 示例 JavaScript MQTT 客户端设置 const mqtt = require('mqtt'); const client = mqtt.connect('mqtt://your_mqtt_server'); client.on('connect', () => { console.log('Connected to MQTT server'); }); client.subscribe('data_topic'); // 替换为实际的主题名 client.on('message', (topic, message) => { handleNewData(JSON.parse(message.toString())); // 这里处理接收到的新数据 }); function handleNewData(data) { // 使用接收到的数据更新 ECharts 图表 } ``` ### 步骤 2: 更新 ECharts 数据源 然后,在前端应用中使用 ECharts 初始化图表,并设置其数据源为从 MQTT 接收的 JSON 对象。通常,这会涉及到监听更新图表的 `onUpdate` 或其他适当的事件处理器。 ```javascript import * as echarts from 'echarts'; var myChart = echarts.init(document.getElementById('main')); var option; option = { title: { text: '数据流', subtext: '实时更新' }, tooltip: {}, xAxis: { data: [] }, yAxis: {}, series: [{ name: '值', type: 'bar' }] }; myChart.setOption(option); function updateChart(data) { if (option.xAxis.data.length > 0) { option.xAxis.data.shift(); } option.xAxis.data.push(new Date()); option.series.data = [data]; myChart.setOption(option); } // 将处理后的数据发送给 ECharts 的 updateChart 函数 handleNewData({ value: your_value }) => updateChart(your_value) ``` ### 相关问题: 1. **如何选择合适的 MQTT 主题**?主题应明确指向所需数据的来源,并考虑到数据的组织结构便于后续处理。 2. **如何优化 MQTT ECharts 性能**?涉及数据频率、缓冲机制以及如何减少不必要的网络请求。 3. **安全性考量**:如何保护 MQTT 消息传输的安全性私密性,特别是对于敏感数据的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余人于RenYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值