vue中实现当前时间echarts图表时间轴动态的数据(实例代码)

代码如下所示:

<!-- ! 废话不多说,直接看代码吧 ! -->
<template>
  <div class="">
    <div class="chart" ref="ref_chart" style="width:370px;height:250px;"> </div>
  </div>
</template>
<script lang="js">
export default {
  data() {
    return {
      syca_myChart: null,  // 图表
      interval: null, //定时器
      x_tm: null,       //获取时间x轴的显示时间
      inTime: '',     //当前的时间
      A_data: [3, 5, 2, 3, 4,], // 电流数据
      V_data: [200, 201, 204, 202, 201, 334], // 电压
    };
  },
  computed: {},
  components: {},
  mounted() {
    this.x_time(); //先获取x轴的一组时间
    this.initChart();  //初始化dom元素
    this.updateChart(); //设置配置进行渲染为图表
    this.getNewTime(); //更新时间
  },
  methods: {
    // 获取 x轴 一组时间值
    x_time() {
      let now = new Date();
      let res = [];
      for (let i = 0; i < 7; i++) {
        res.unshift(now.toLocaleTimeString().replace(/^\D*/, ''));
        now = new Date(+now - 3000);  // 时间间隔
      }
      this.x_tm = res;
    },

    //初始化对象
    initChart() {
      this.syca_myChart = this.$echarts.init(this.$refs.ref_chart, "macarons");
    },
    //请求数据
    get_data() {
      // 在此处进行通过websoket进行数据交互代码 略...
    },

    //更新数据
    updateChart() {
      let option = {
        title: {
          show: true,
          text: "电流/电压", //标题
          top: 2,
          left: 2,
          textStyle: {
          },
          // subtext: '  - 折线图',   //二级标题
          subtextStyle: {
            // lineHeghit: 6
          },
        },
        legend: {
          data: ['电流', "电压"],
          top: 4,
        },
        toolbox: {
          show: true,  // 是否显示工具
          itemSize: 11,
          itemGap: 6,  //间隔大小
          // right: 25,
          feature: {
            saveAsImage: {  //保存为图片
              type: "jpg",
              backgroundColor: "#00274b"
            },
            dataView: {
              // 数据视图
              show: true,
              readOnly: true, // 是否可以读写
              // backgroundColor: "#00274b"
            },
            restore: {
              // 还原
            },
          }
        },
        xAxis: {
          type: 'category',
          data: this.x_tm,
          // name: "时间",
          // nameLocation: "end"
          // boundaryGap: false  // 紧挨边缘
          axisLabel: {
            fontSize: 11,
            formatter: '{value}',
            // y轴的显示数据单位
            rotate: -20,//刻度偏移
          },
        },
        yAxis: [
          {
            type: 'value',
            scale: true,  //是否是脱离 0 值比例
            // name: " 单位V",
            axisLabel: {
              fontSize: 11,
              formatter: '{value} V',
              // y轴的显示数据单位
              rotate: 20,//刻度偏移
            },
            minInterval: 1
          },
        ],
        grid: {
          top: '20%',
          right: '8%',
          left: '12%',
          bottom: '14%',

        },
        tooltip: {             //图标划过显示
          show: true,
          trigger: 'axis',
          axisPointer: {
            // type: 'cross',  //十字提示指示线
            // type: 'line', //
            lineStyle: {
              type: 'dashed', //线的类型 虚线
              // snap: true,    // 划过吸附指示线
            }
          },
          //悬浮窗的内容
          // a: 系列名,b: (x轴)类目值, c: 数据值
          // formatter: `{b}<br>{a}: {c} PM `,
          // background: "red",//悬浮窗的背景色
          // borderColor: '',//边框色
          borderWidth: 3,//边框宽
          // padding: '', //内边距
          alwaysShowContent: false, //悬浮窗是否一直显示
          hideDelay: 1000, //划入时悬浮多少秒
          enterable: true, //划入正常显示
          textStyle: {    //悬浮框的样式
            color: '#fff',
            fontSize: 14,

          }
        },
        series: [
          {
            name: '电流',
            data: this.A_data,
            type: 'line',
            smooth: true,  // 折线图的线条是否平滑
            areaStyle: {}, // 背景填充
            // stack: "all",   // 多组数据堆叠
            label: {
              show: true,    //数据标签显示
              position: 'top', //数据显示位置
              distance: 8, // 距离
              offset: [-2, -2], //文字偏移
              formatter: "{c}", //标签内容

            },
          },
          {
            name: '电压',
            data: this.V_data,
            type: 'line', // line 折线  bar 柱状
            smooth: true,  // 折线图的线条是否平滑
            areaStyle: {}, // 背景填充
            // stack: "all",   // 多组数据堆叠
            label: {
              show: true,    //数据标签显示
              position: 'top'
            },
          }
        ]
      }
      //进行渲染图表
      this.syca_myChart.setOption(option);
    },
    // 更新时间
    getNewTime() {
      clearInterval(this.interval); // 开启定时器之前先清上次的
      this.interval = setInterval(() => {
        this.inTime = new Date().toLocaleTimeString();
        this.x_tm.push(this.inTime);
        if (this.x_tm.length > 5) {
          this.x_tm.shift();
        }
        this.updateChart();
      }, 3000)
    },
  },
  watch: {},
  destroyed() {
    clearInterval(this.interval);
  },
};
</script>
<style scoped lang='less'>

</style>

效果图展示:

到此这篇关于vue中实现当前时间echarts图表时间轴动态的数据的文章就介绍到这了,更多相关vue echarts图表时间轴动态数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • echarts实现获取datazoom的起始值(包括x轴和y轴)

    我就废话不多说了,大家还是直接看代码吧~ let option = {} //你的echarts图表的配置,这里我就不贴我的了 myChart.setOption(option); //开始 let startValue = myChart.getModel().option.dataZoom[0].startValue; let endValue = myChart.getModel().option.dataZoom[0].endValue; let start = myChart.getM

  • 解决echarts中横坐标值显示不全(自动隐藏)问题

    echarts中,横轴数据如果非常多,会自动隐藏一部分数据,我们可以通过属性interval来进行调整. 如下图,当横轴时间为13天时,echarts会自动隔天显示 如果我们想显示全,则需要在xAxis 属性加上axisLabel:{interval: 0} "xAxis":[{"data":["2015-5-13","2015-5-14","2015-5-15","2015-5-16"

  • 解决echarts图表y轴数据间隔过大的问题

    目录 echarts图表y轴数据间隔过大的问题 echarts图表Y轴最小间隔值 改为1 总结 echarts图表y轴数据间隔过大的问题 1.如图所示,echarts图表y轴数据间隔过大,前面几个显示正常,最后一个值变得很大,造成页面特别难看 2.解决办法: 在yAxis中axisLabel设置如下,可以根据自己的需求截取几位小数点 yAxis: { type: "value", axisLabel: { formatter:function (value, index) { retu

  • vue中实现当前时间echarts图表时间轴动态的数据(实例代码)

    代码如下所示: <!-- ! 废话不多说,直接看代码吧 ! --> <template> <div class=""> <div class="chart" ref="ref_chart" style="width:370px;height:250px;"> </div> </div> </template> <script lang=&

  • vue中选中多个选项并且改变选中的样式的实例代码

    1:HTML: <ul class="content"> <li v-for="(item,index) in touristList" @click="onStorage(item,index)" :class="{'active': rSelect.indexOf(item)!=-1}" :key="item.id"> <div>{{item.name}}</d

  • echarts统计x轴区间的数值实例代码详解

    有时我们需要统计自定义echarts图,统计x轴区间的y轴数量. 思路是利用echarts的自定义配置:option.series[i].type='custom'中的renderItem(params, api)函数进行处理,这里包括了两个参数:params是对应每一个dataItem的数据信息;api是可调用的方法(api.value()和api.coord()).详情可以查看官方文档. 以下是改自官方实例: https://www.echartsjs.com/examples/editor

  • vue中el-table两个表尾合计行联动同步滚动条实例代码

    目录 问题描述 效果图 思路 完整代码 总结 问题描述 最近产品提出一个需求,说是做表格呈现统计数据,不过数据源是来自两个地方的,所以需要做两个表格去呈现数据,同时在表格最后统计数据. 效果图 我们先看一下效果图 思路 获取对应的两个表格设置滚动条的dom,并通过Element.scrollLeft去设置滚动的距离 官方文档:developer.mozilla.org/zh-CN/docs/… 滚动容器(审查元素即可得知): 完整代码 自己演示的话,直接复制粘贴即可,代码中包含注释 <templ

  • 在vue中使用axios实现post方式获取二进制流下载文件(实例代码)

    需求 点击导出下载表格对应的excel文件 在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api 实现 第一步,在 axios 请求中加入参数,表示接收的数据为二进制文件流 responseType: 'blob' 第二步,在拿到数据流之后,把流转为指定文件格式并创建a标签,模拟点击下载,实现文件下载功能 let blob = res.data let reader = new FileReader() reader.readAsDataURL(blob) r

  • vue中根据时间戳判断对应的时间(今天 昨天 前天)

    根据时间戳 来显示对应的时间段 本文是根据vue缩写,但是原理都是想通的 根据一个时间戳,然后来显示对应的时间段.如果为今天,则显示对应的time,如果为昨天,则显示为昨天,如果为前天,则显示为前天.剩下的显示为对应的日期 需求定义好了,然后开始实现: 首先,是把时间戳转换为对应的时间格式,js提供了原生的获取对应年.月.日等格式的方法,但是不够灵活,这里提供了一个网上找的比较灵活获取固定格式的函数. const formatDate = (date, fmt) => { date = new

  • vue中如何利用js函数截取时间的年月日时分秒

    目录 前言 解决方法: 1. 使用自定义函数格式化时间数据: 2. 利用substring函数截取: 3. 利用left函数截取 4. 利用right函数截取 总结 前言 在vue中,从后台获取数据,如果不是sql语句(类似:select convert(char(10),GetDate(),120) as Date)获取的数据,在前台就会出现如下情况: 解决方法: 1. 使用自定义函数格式化时间数据: (1)年月日: var timearr = time.replace(" ", &

  • vue print.js打印支持Echarts图表操作

    网上找的print.js做了修改,支持Echarts图表这里记录一下,不知道是哪家的代码了,我看都一样 这里是看到了两个源码 https://github.com/xyl66/vuePlugs_printjs/blob/master/print.js https://github.com/denghao123/Print.js 以下是我修改过的 print.js // 打印类属性.方法定义 /* eslint-disable */ const Print = function (dom, opt

  • 基于Echarts图表在div动态切换时不显示的解决方式

    简单粗暴,先上图,大概长这样: 在使用vue时有遇到像上图下拉框change事件切换div,change切完后大概会变成这个样子: 上代码: <div class="test"> <p class="title"> <select v-model="selected" v-on:change="change"> <option v-for="option in options

随机推荐