Vue Echarts实时动态图表实现

Vue Echarts实时动态图表实现

针对实时数据推送的 动态Echarts图表 解决方案。

1.效果

动态Echart图表解决方案——vue2

2.代码

created() {
    this.$nextTick(() => {
      this.initEchartsHandle();
    });
},
methods: {
   initEchartsHandle() {
      var chartDom = document.getElementById("device-info-echarts");
      var myChart = this.$echarts.init(chartDom);
      // 基础配置代码
      var option = {
        title: {
          text: "实时数据信息",
        },
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "cross",
            label: {
              backgroundColor: "#6a7985",
            },
          },
        },
        legend: {
          data: ["磁盘占有率", "CPU使用率", "GPU使用率", "Sta曲线"],
        },
        toolbox: {
          feature: {
            saveAsImage: {},
          },
        },
        grid: {
          left: "3%",
          right: "4%",
          bottom: "3%",
          containLabel: true,
        },
        xAxis: [
          {
            type: "category",
            boundaryGap: false,
            data: [""],
          },
        ],
        yAxis: [
          {
            type: "value",
          },
        ],
        series: [
          {
            name: "磁盘占有率",
            type: "line",
            stack: "Total",
            areaStyle: {},
            emphasis: {
              focus: "series",
            },
            data: [1],
          },
          {
            name: "CPU使用率",
            type: "line",
            stack: "Total",
            areaStyle: {},
            emphasis: {
              focus: "series",
            },
            data: [1],
          },
          {
            name: "GPU使用率",
            type: "line",
            stack: "Total",
            label: {
              show: true,
              position: "top",
            },
            areaStyle: {},
            emphasis: {
              focus: "series",
            },
            data: [1],
          },
          {
            name: "Sta曲线",
            type: "line",
            stack: "Total",
            label: {
              show: true,
              position: "top",
            },
            areaStyle: {},
            emphasis: {
              focus: "series",
            },
            data: [1],
          },
        ],
      };
      myChart.setOption(option);
      // 页面尺寸发生变化时,echarts布局自适应
      window.addEventListener("resize", function () {
        myChart3.resize();
      });
      
      // 模拟推送数据————(可根据实际数据获取方式调整)
      setInterval(() => {
        this.getLatestData(myChart, option);
      }, 2000); // 实时 两秒 获取数据
    },

	// 获取数据
    getLatestData(myChart, option) {
      // 添加最新数据项
      option.series.forEach((item, index) => {
        item.data.push(item.data[item.data.length - 1] + 20);
        //截取最新的固定条数的数据(截取7个)
        item.data = item.data.slice(-7);
      });

      // 如果X轴也是实时数据,可以这样更新
      var NowTime = this.formatDate(new Date(), true);
      //添加数据并截取最后七位最新数据
      option.xAxis[0].data.push(NowTime);
      option.xAxis[0].data = option.xAxis[0].data.slice(-7);
	  //重新配置数据
      myChart.setOption(option, true);
    },

    //时间格式化
    formatDate(date, isEchart = undefined) {
      const year = date.getFullYear();
      const month = date.getMonth() + 1;
      const day = date.getDate();
      const hour = date.getHours();
      const minute = date.getMinutes();
      const second = date.getSeconds();
      const formatNumber = (n) => {
        n = n.toString();
        return n[1] ? n : "0" + n;
      };
      if (isEchart) {
        return [hour, minute, second].map(formatNumber).join(":");
      } else {
        return (
          [year, month, day].map(formatNumber).join("-") +
          " " +
          [hour, minute, second].map(formatNumber).join(":")
        );
      }
    },
  }

3.注意

上面代码配置项option 或option.xAxis[0].data、option.series 的数据值,并 没有 放在 Vue 组件 data选项 中,是为了避免 出现 Vue data中 对象或数组数据在后续添加时 新数据不会被响应式处理,导致出现,Echart 数据更新了但页面视图未变化的情况。

echarts配置项option中的数据当然也可以放在 data 选项中,但是 如果出现Echart 数据更新了但页面视图未变化的情况,就需要去考虑 和 处理 是不是新增的数据 没有被响应式处理。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现动态绘制图表,可以使用Vue.js做前端框架,使用Echarts.js做图表库。下面是一个简单的实现过程: 1. 在Vue.js中安装Echarts.js。可以通过npm或者cdn的方式来安装。 2. 在Vue.js组件中引入Echarts.js,并初始化一个echarts实例。 3. 在Vue.js的data中定义一个数组,用来存储图表的数据。在mounted生命周期钩子中,设置一个定时器,每隔一段时间就往数据数组中添加一些数据。 4. 在Vue.js的methods中定义一个函数,用来更新图表。在这个函数中,使用echarts实例的setOption方法来更新图表数据。 5. 在Vue.js的template中,添加一个div元素作为图表容器,并设置宽高。在mounted生命周期钩子中,使用echarts实例的init方法初始化图表,并在更新图表数据时调用更新函数。 下面是一个简单的示例代码: ``` <template> <div id="chart" style="width: 600px; height: 400px;"></div> </template> <script> import echarts from 'echarts' export default { data () { return { chartData: [] } }, mounted () { this.chart = echarts.init(document.getElementById('chart')) this.timer = setInterval(() => { this.addData() this.updateChart() }, 1000) }, methods: { addData () { this.chartData.push(Math.random() * 100) }, updateChart () { this.chart.setOption({ xAxis: { type: 'category', data: Array.from({ length: this.chartData.length }, (_, i) => i) }, yAxis: { type: 'value' }, series: [{ data: this.chartData, type: 'line' }] }) } }, beforeDestroy () { clearInterval(this.timer) this.chart.dispose() } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值