首页 > 其他分享 >【Echarts 实战指南】解锁动态历史曲线之谜

【Echarts 实战指南】解锁动态历史曲线之谜

时间:2024-10-17 10:17:26浏览次数:3  
标签:00 17 show color 解锁 value true Echarts 之谜

在工作中,大家是否曾遇到过这样一种需求呢?需获取设备最近 10 分钟的历史数据。设备实时数据每 2 秒推送一次,且要把历史数据曲线变成动态变化的状态。倘若设备最近 10 分钟的历史数据为 20 个点,那么现在每 2 秒就要将最前面的点删除,同时推送最新的数据。一旦数据发生变化,便加载历史曲线函数,从而达成动态效果。
在这里插入图片描述

template

<template>
    <a-card shadow="none" style="margin:20px 0 0 20px" title="">
     	<div class="item" ref="chartContainer6"></div>
    </a-card>
</template>

script

<script setup>
	import * as echarts from 'echarts'
	import { ref, onMounted, onUnmounted } from 'vue'
	let chartContainer6 = ref(null)
	//假设这是最近 10 分钟的历史数据,实际项目中请求接口
	const data1 = ref([20, 25, 24, 21, 30, 26, 35, 30, 31, 36, 28, 25, 31, 36, 19, 22, 50, 40, 25, 30]);
	const data2 = ref([40, 56, 42, 65, 45, 48, 42, 52, 45, 50, 48, 45, 51, 56, 49, 52, 50, 60, 49, 51]);
	const time = ref(['17:00:00', '17:00:02', '17:00:04', '17:00:06', '17:00:08', '17:00:10', '17:00:12', '17:00:14', '17:00:16', '17:00:18',
	    '17:00:20', '17:00:22', '17:00:24', '17:00:26', '17:00:28', '17:00:30', '17:00:32', '17:00:34', '17:00:36', '17:00:38'
	]);
	//当前时间:时分秒
	function getCurrentTime() {
	    const now = new Date();
	    let hours = now.getHours();
	    let minutes = now.getMinutes();
	    let seconds = now.getSeconds();
	
	    hours = hours < 10 ? '0' + hours : hours;
	    minutes = minutes < 10 ? '0' + minutes : minutes;
	    seconds = seconds < 10 ? '0' + seconds : seconds;
	
	    return `${hours}:${minutes}:${seconds}`;
	}
	function getRandomArbitrary(min, max) {
	    return Math.random() * (max - min) + min;
	}
	// 生成随机数并推入数组
	function pushRandomData() {
	    // 删除数组的第一个元素
	    if (data1.value.length > 0) data1.value.shift();
	    if (data2.value.length > 0) data2.value.shift();
	    if (time.value.length > 0) time.value.shift();
	    // 添加新的随机数值
	    const randomValue1 = Math.floor(getRandomArbitrary(20, 40));
	    const randomValue2 = Math.floor(getRandomArbitrary(40, 60));
	    data1.value.push(randomValue1);
	    data2.value.push(randomValue2);
	    time.value.push(getCurrentTime());
	}
	function realtimeCurve() {
    const chart = echarts.init(chartContainer6.value);
    const options = {
        tooltip: {
            show: true,
            trigger: 'axis'
        },
        legend: {
            show: true,
            type: "scroll",
            bottom: 0,
            textStyle: {
                color: '#fff'
            }
        },
        grid: {
            top: '10%',
            left: '5%',
            right: '2%',
            bottom: '15%',
            containLabel: true
        },
        xAxis: [{
            type: 'category',
            boundaryGap: true,
            axisLabel: {
                textStyle: {
                    color: '#11EEE1',
                    padding: 6,
                    fontSize: 10
                },
                formatter: function (data) {
                    return data
                }
            },
            splitLine: {
                show: false,
                lineStyle: {
                    color: "#11EEE1"
                },
            },
            axisLine: {
                show: true,
                textStyle: {
                    color: '#11EEE1',
                },
            },
            axisTick: {
                show: true,
                textStyle: {
                    color: '#11EEE1',
                },
            },
            data: time.value
        }],
        yAxis: [{
            name: '',
            splitLine: {
                show: false,
                lineStyle: {
                    color: "#11EEE1"
                },
            },
            axisLine: {
                show: true,
                textStyle: {
                    color: '#11EEE1',
                },
            },
            axisTick: {
                show: true,
                textStyle: {
                    color: '#11EEE1',
                },
            },
            axisLabel: {
                show: true,
                textStyle: {
                    color: '#11EEE1',
                    padding: 6,
                },
                formatter: function (value) {
                    if (value === 0) {
                        return value
                    }
                    return value
                }
            },
        }],
        series: [{
            name: 'High Press',
            type: 'line',
            symbol: 'circle',
            showAllSymbol: true,
            symbolSize: 0,
            smooth: true,
            lineStyle: {
                normal: {
                    width: 2,
                    color: "rgba(33,150,243, 1)",
                }
            },
            itemStyle: {
                color: "rgba(33,150,243, 1)",
                borderWidth: 2
            },
            tooltip: {
                show: true
            },
            data: data1.value
        }, {
            name: 'Low Press 1',
            type: 'line',
            symbol: 'circle',
            showAllSymbol: true,
            symbolSize: 0,
            smooth: true,
            lineStyle: {
                normal: {
                    width: 2,
                    color: "rgba(76,175,80, 1)",
                }
            },
            itemStyle: {
                color: "rgba(76,175,80, 1)",
                borderWidth: 2

            },
            tooltip: {
                show: true
            },
            data: data2.value
        }]
    }
    chart.setOption(options);
}
// 设置定时器,每2秒执行一次
intervalId = setInterval(() => {
    pushRandomData(); // 当前时间
    realtimeCurve(); // 历史曲线
}, 2000);
onMounted(() => {
    realtimeCurve()
});
onUnmounted(() => {
    if (intervalId) {
        clearInterval(intervalId);
    }
});
</script>

在这里插入图片描述

标签:00,17,show,color,解锁,value,true,Echarts,之谜
From: https://blog.csdn.net/weixin_52814911/article/details/142986430

相关文章

  • 【Linux】解锁线程基本概念和线程控制,步入多线程学习的大门
    目录1、线程初识1.1线程的概念1.2.关于线程和进程的进一步理解1.3.线程的设计理念1.4.进程vs线程(图解)1.5地址空间的第四谈2.线程的控制:2.1.关于线程控制的前置知识2.2创建线程的系统调用:这个几号手册具体代表的什么含义?2.3.线程终止我们怎么没有像进程一样获取线程......
  • 文本三剑客之一:解锁sed的强大秘籍,让文本处理轻松无忧!转载
    sed sed处理的是行sed不打开文件的情况下更改文件的内容sed[选项]...{脚本语法}文件名sed自己的语法:输出哪些行,留下哪些行语法:范围+操作 sed命令的选项-i:实际修改文件内容-i.bak:实际修改前先备份原文件,会产生一个源文件.bak的文件-n:关闭自动打印-r:使用扩展正则表......
  • AI时代的神器,解锁 PPT 制作新体验--分享使用经验
    背景:探讨人们在使用AI工具时,最喜欢的和认为最好用的工具是哪些,展示AI技术的实际应用和影响。说明:本文分析的AI技术的实际应用是制作PPT的AI工具。>>快速访问本文的AI工具<<你好,我是三桥君你有没有为做PPT而抓狂过?是不是觉得做PPT简直比登天还难?尤其是当时间紧迫......
  • vue3+h5+echarts引入折线图
     实现效果:1.引入echarts,在终端输入命令npminstallecharts--save2.安装成功后直接复制以下代码即可<template><divref="chartDom"class="echart"id="main"></div></template><scriptsetup>import{onMounted,......
  • Spotify v8.10.9.722 安卓流媒体音乐播放APP解锁高级版
    SpotifyforAndroid安卓APP流媒体音乐播放软件高级版是一款流行的音乐串流服务软件,用户可以通过它免费或付费收听音乐、播客和电台。Spotify应用程序可以在计算机、手机、平板电脑、车载系统和游戏机等多种设备上使用。Spotify平台上有数百万首歌曲和播客可供用户选择,用户可......
  • ECharts关系图-悲惨世界人物关系图(环形布局),附视频讲解与代码下载
    引言: 关系图(或称网络图、关系网络图)在数据可视化中扮演着至关重要的角色。它们通过节点(代表实体,如人、物体、概念等)和边(代表实体之间的关系或连接)的形式,直观地展示了数据集中各元素之间的复杂关联。本文将详细介绍如何使用ECharts库实现一个关系图,包括图表效果预览、视频讲解......
  • Vue2+ECharts+Mock.js实现前端后台通用管理系统页面
    一、前言  在现代Web开发中,前端框架与数据可视化工具的结合能够显著提升用户体验。本文将介绍如何使用Vue2和ECharts构建一个通用的后台管理系统页面。利用Vue2的组件化特性,可以高效管理应用状态与UI交互,而ECharts则提供多样的图表类型,便于展示数据分析结果。通过整合这两......
  • 解锁全部潜能!《犯罪现场清洁工》风灵月影十四项修改器:无限垃圾容量/无限的洗衣机水/快
    犯罪现场清洁工修改器是款强大的游戏辅助工具,可助你修改设置,如无限清洁工具、调整速度、增加技能点及设置跳跃与侧移高度等,轻松应对游戏难关,清扫各地图的脏污与血迹,完成任务挑战。感兴趣的朋友切勿错过!修改器地址:https://bbs.18183.com/thread-10608-1-1.htmlhttps://bbs.1......
  • 起吊机革新:协议转换器解锁安全与效率
    重工起吊机设备在工业生产中扮演着至关重要的角色,但其在实际应用中面临着一系列痛点问题。这些问题不仅影响了起吊机的性能和安全性,还限制了生产效率的提升。明达技术自主研发的MG协议转换器能够高效解决这些痛点,同时MG协议转换器作为一种关键设备,也为解决这些问题提供了新的思路。......
  • 【NLP自然语言处理】探索注意力机制:解锁深度学习的语言理解新篇章
     目录......