vue中实现Echarts折线图多数据动态显示

可以复制搜索看看是否是想要的效果

https://gallery.echartsjs.com/editor.html?c=xtdeZMuQ4t

//SignalR

https://blog.csdn.net/weixin_42768220/article/details/107575940

也就是折线图1秒或者几秒获取一次数据(通过SignalR请求端口数据),当然请求数据库也是可以实现的,但是对于数据库性能也是特别消耗的,现在先看看动态的折线图是如何实现的吧
//==============================================================
子组件

<template>
  <div :class="className" :style="{height:height,width:width}" />//单独的组件渲染对于Echarts
</template>


data() {
    return {
    	chart: null,
    	Obj: {//定义的变量用来存储获取过来的数据
		        XData: [],
		        YData: []
		      }
    }
}
methods: {
	SetData(data) {
      // debugger;
      // console.log(data,'data')
      let me = this;
      me.$el.removeAttribute("_echarts_instance_");
      me.chart = echarts.init(me.$el, "macarons");
      if (!isEmpty(data)) {
        me.initChart(data);
      } else {
        let EmptyChartImg =
          '<img class="EmptyChartImg" src="' + me.isEmptyChartImg + '">';
          me.$el.innerHTML = EmptyChartImg;
      }
    },
    SetSeriesData(dataValue){
        let me = this; //在父组件中通过$ref讲获取的数据过来接收dataValue
        if (!this.chart) {//判断最开始如果没有渲染过折线,那么就需要对折线图初始化
          me.SetData(dataValue);
        }else{//否则再次获取过来的数据不需要重新渲染,直接push获取过来的值
          if(this.Obj.YData.length>20){
          this.Obj.XData.shift()
          this.Obj.YData.shift();
              
          }
          this.Obj.YData.push(dataValue.Value);

          this.Obj.XData.push(getTime(Math.round(new Date().getTime()/ 1000)));//获取当前的时间
          me.chart.setOption({//重新给data赋值
              series: [{
                  data: this.Obj.YData
              }],
              xAxis: [{
                  data: this.Obj.XData
              }],
          });
        }
    },
    initChart(dynamicData) {
      // debugger;//初始化
        let me = this;      
            this.Obj.XData.push(getTime(Math.round(new Date().getTime() / 1000)));
        if (!isEmpty(dynamicData.Value)) {
            this.Obj.YData.push(dynamicData.Value);
        }
      me.setOptions();//调用setOptions
    },  
    setOptions() {
        let me = this;      
        // 生成初始数据
      me.chart.setOption({//设置想要实现的样式
        title: {
          left: "center",
          text: "",
          textStyle: {
            fontWeight: 500,
            fontSize: "20"
          }
        },
        tooltip: {
          trigger: "axis"
        },
        grid: {
          left: "3%",
          right: "4%",
          bottom: "3%",
          containLabel: true
        },
        xAxis: {
          type: "category",
          boundaryGap: false,
          axisLine: {
            lineStyle: {
              color: "#57617B"
            }
          },
          data: this.Obj.XData
        },
        yAxis: {
          name: "ss",
          type: "value",
          splitArea: {
            show: false
          },
          axisTick: {
            show: false //隐藏X轴刻度
          }
        },
        series: [
          {
            name: "发送",
            type: "line",
            showSymbol: false,
            lineStyle: {
              normal: {
                width: 1
              }
            },
            data: this.Obj.YData
          }
        ]
      });
    },
}

function getTime() {
        var ts = arguments[0] || 0;
        var t, h, i, s,y,m,d;
        t = ts ? new Date(ts * 1000) : new Date();
        y = t.getFullYear();
        m = t.getMonth()+1;
        d = t.getDay();

        h = t.getHours();
        i = t.getMinutes();
        s = t.getSeconds();
        // 可根据需要在这里定义时间格式
        return y +'年'+m+'月'+d +'日'+ ' '+(h < 10 ? '0' + h : h) + ':' + (i < 10 ? '0' + i : i) + ':' + (s < 10 ? '0' + s : s);
    }

//============================================================
父组件

<DynamicChart ref="DynamicChart"></DynamicChart>//在此组件中展示
<Signalr @SignalrData="SignalrData"></Signalr>//Signalr获取端口数据
SignalR获取的方法会在  https://blog.csdn.net/weixin_42768220/article/details/107575940  里阐述
<script>
import DynamicChart from '@/views/components/InsertManage/OPCUA/OPCUAHistory/DynamicChart'
import Signalr from '@/views/components/InsertManage/OPCUA/Signalr'
components:{
	DynamicChart,
	Signalr
}
methods:{
	SignalrData(data){
            this.$refs.DynamicChart.SetSeriesData(data);//将值传过去
        },
}
</script>

以上所实现的方法是通过SignalR获取数据传值,动态展示的方法,如果想要一直获取数据库的数据,来动态展示,也是可以实现的,就是需要通过setTimeout来实现,(setInterval实现的话可以的,缺点也很明显,破坏性比较强),用setTimeout循环调用(递归)就可以实现了,但是最好还是通过获取端口数据,后端也可以定时传值,也不用做循环。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3使用ECharts的动态折线图设置时间轴可以通过以下步骤实现。 1.安装EChartsVue3项目安装ECharts: ``` npm install echarts --save ``` 2.引入ECharts 在组件引入ECharts: ```js import * as echarts from "echarts"; ``` 3.创建实例 在组件创建一个ECharts实例: ```js const chart = echarts.init(document.querySelector("#chart")); ``` 4.设置配置项 配置项是用于描述图表的样式和数据的,可以在创建实例时进行设置: ```js const options = { xAxis: { type: "category", data: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], }, yAxis: { type: "value", }, series: [ { data: [120, 200, 150, 80, 70, 110, 130], type: "line", }, ], }; ``` 5.设置时间轴 在配置项添加时间轴配置: ```js const options = { xAxis: { type: "category", data: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], }, yAxis: { type: "value", }, series: [ { data: [120, 200, 150, 80, 70, 110, 130], type: "line", }, ], // 添加时间轴配置 dataZoom: [ { type: "slider", xAxisIndex: 0, filterMode: "filter", start: 0, end: 60, }, ], }; ``` 其,type为slider表示使用滑动条文件,xAxisIndex为0表示只关联x轴索引为0的轴,filterMode为filter表示按范围过滤数据,start和end分别为时间轴的开始和结束位置。 最后,将配置项应用到ECharts实例: ```js chart.setOption(options); ``` 这样就可以在动态折线图显示时间轴了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值