Vue3Echarts写关于温湿度统计的好看折线图

news2025/1/17 1:10:50

在项目统计界面,我们离不开对Echarts的使用,接下来是我在做项目过程中做的一个关于温湿度统计的好看折线图,统计的是温度蓝色和湿度绿色,它们还会有告警和断电,分别用橘黄色和红色区分,以下是示例:

下载Echarts

//npm
npm install echarts --save

//淘宝镜像cnpm(安装速度快)
cnpm install echarts --save

//yarn
yarn add echarts

代码案例

<template>
    <div id="echartsOne" style="width: 100%;height: 100%;"></div>
</template>

<script setup>
    import * as echarts from 'echarts';
    import { onMounted,ref } from 'vue';
    onMounted(()=>{
        getEcharts();
    })
    const getEcharts = () => {
        let chartDom = document.getElementById("echartsOne");
        let myChart = echarts.init(chartDom);
        let wsdList = [{
      	createTime: "10:20",
      	humStatus: 0,
      	humidity: "59.4",
      	isOff: 0,
      	tempStatus: 0,
      	temperature: "28.8",
      }, {
      	createTime: "10:21",
      	humStatus: 0,
      	humidity: "59.4",
      	isOff: 1,
      	tempStatus: 0,
      	temperature: "28.8",
      }, {
      	createTime: "10:22",
      	humStatus: 0,
      	humidity: "59.4",
      	isOff: 0,
      	tempStatus: 1,
      	temperature: "28.8",
      }, {
      	createTime: "10:23",
      	humStatus: 0,
      	humidity: "59.4",
      	isOff: 0,
      	tempStatus: 0,
      	temperature: "28.8",
      }, {
      	createTime: "10:24",
      	humStatus: 1,
      	humidity: "59.4",
      	isOff: 0,
      	tempStatus: 0,
      	temperature: "28.8",
      }, {
      	createTime: "10:25",
      	humStatus: 0,
      	humidity: "59.4",
      	isOff: 1,
      	tempStatus: 0,
      	temperature: "28.8",
      }, {
      	createTime: "10:26",
      	humStatus: 1,
      	humidity: "59.4",
      	isOff: 0,
      	tempStatus: 0,
      	temperature: "28.8",
      },]
      let rq = []
      rq = wsdList.map(val => {
      	return val.createTime
      })
      let seriesArr = []
      let list = [{
      		name: "温度",
      		children: wsdList.map(val => {
      			let temp0 = val.tempStatus == 0 ? `rgb(68, 247, 227)` : `rgb(240, 128, 19)`;
      			return {
      				name: val.createTime,
      				value: val.isOff == 1 ? 6 : val.temperature,
      				isOff: val.isOff,
      				offTime: val.offTime ? val.offTime : "",
      				itemStyle: {
      					color: {
      						type: 'radial',
      						x: 0.5,
      						y: 0.5,
      						r: 0.5,
      						colorStops: [{
      								offset: 0,
      								color: val.isOff == 1 ? 'rgb(191, 53, 44)' : temp0, //中心颜色
      							},
      							{
      								offset: 0.4,
      								color: val.isOff == 1 ? 'rgb(191, 53, 44)' : temp0,
      							},
      							{
      								offset: 0.5,
      								color: '#ffffff00',
      							},
      							{
      								offset: 1,
      								color: '#ffffff00',
      							},
      						],
      					},
      					borderColor: val.isOff == 1 ? 'rgb(191, 53, 44)' : temp0,
      					borderWidth: 2,
      				},
      				lineStyle: {
      					type: "dashed",
      					color: val.isOff == 1 ? 'rgb(191, 53, 44)' : temp0,
      					width: 2,
      				},
      				label: {
      					show: false,
      					// show: val.isOff == 1 ? false : true
      				}
      			}
      		})
      	},
      	{
      		name: "湿度",
      		children: wsdList.map(val => {
      			let hum0 = val.humStatus == 0 ? `rgb(36, 214, 129)` : `rgb(240, 128, 19)`;
      			return {
      				name: val.createTime,
      				value: val.isOff == 1 ? 10 : val.humidity,
      				isOff: val.isOff,
      				itemStyle: {
      					color: {
      						type: 'radial',
      						x: 0.5,
      						y: 0.5,
      						r: 0.5,
      						colorStops: [{
      								offset: 0,
      								color: val.isOff == 1 ? 'rgb(191, 53, 44)' : hum0, //中心颜色
      							},
      							{
      								offset: 0.4,
      								color: val.isOff == 1 ? 'rgb(191, 53, 44)' : hum0,
      							},
      							{
      								offset: 0.5,
      								color: '#ffffff00',
      							},
      							{
      								offset: 1,
      								color: '#ffffff00',
      							},
      						],
      					},
      					borderColor: val.isOff == 1 ? 'rgb(191, 53, 44)' : hum0,
      					borderWidth: 2,
      				},
      				// lineStyle: {
      				//     type: "dashed",
      				//     color: val.isOff==1?'rgb(191, 53, 44)':hum0,
      				//     width: 2,
      				// },
      				label: {
      					show: false,
      					// show: val.isOff == 1 ? false : true,
      				}
      			}
      		})
      	}
      ]
      let colorArr = ["68, 247, 227", "36, 214, 129", "191, 53, 44"]
      list.forEach((val, index) => {
      	seriesArr.push({
      		yAxisIndex: val.name == "温度" ? 1 : 0,
      		xAxisIndex: 0,
      		name: val.name,
      		type: 'line',
      		data: val.children,
      		markLine: {
      			symbol: ['none', 'none'],
      			label: {
      				formatter: '{b}',
      				show: true,
      			},
      			data: [{
      				lineStyle: {
      					type: 'dashed',
      					color: "rgba(191, 53, 44,0)",
      					width: 2,
      				},
      				name: '断电',
      				label: {
      					color: "rgb(191, 53, 44)",
      					fontWeight: 600,
      					fontFamily: "黑体",
      					fontSize: 14,
      				},
      				yAxis: val.name == "湿度" ? 10 : 6,
      			}],
      		},
      		smooth: false,
      		symbolSize: 15,
      		symbol: 'circle',
      		showAllSymbol: true,
      		itemStyle: {
      			color: {
      				type: 'radial',
      				x: 0.5,
      				y: 0.5,
      				r: 0.5,
      				colorStops: [{
      						offset: 0,
      						color: `rgb(${colorArr[index]})`, //中心颜色
      					},
      					{
      						offset: 0.4,
      						color: `rgb(${colorArr[index]})`,
      					},
      					{
      						offset: 0.5,
      						color: '#ffffff00',
      					},
      					{
      						offset: 1,
      						color: '#ffffff00',
      					},
      				],
      			},
      			borderColor: `rgb(${colorArr[index]})`,
      			borderWidth: 2,
      		},
      		label: {
      			show: true,
      			position: val.name == "湿度" ? 'top' : "bottom",
      			textStyle: {
      				color: '#fff',
      				fontSize: 12
      			},
      			formatter: function(arr) {
      				return val.name == "温度" ? arr.value : arr.value + '%'
      			}
      		},
      		lineStyle: {
      			type: "dashed",
      			color: `rgb(${colorArr[index]})`,
      			width: 2,
      		}
      	})
      })
      let endNum = 5 / wsdList.length * 100
      let option = {
      	backgroundColor: "#06444a",
      	dataZoom: [{
      			type: 'inside',
      			start: 100 - (endNum > 100 ? 100 : endNum),
      			end: 100,
      			zoomLock: true, //定当前窗口,将缩放修改为左右偏移窗口
      		},
      		{
      			type: 'slider',
      			start: 100 - (endNum > 100 ? 100 : endNum),
      			end: 100,
      			zoomLock: true, //定当前窗口,将缩放修改为左右偏移窗口
      			height: 20,
      			showDetail: false,
      			brushSelect: false,
      		},
      	],
      	tooltip: {
      		trigger: 'axis',
      		axisPointer: {
      			lineStyle: {
      				color: '#ddd'
      			}
      		},
      		backgroundColor: 'rgba(255,255,255,1)',
      		padding: [5, 10],
      		textStyle: {
      			color: '#000',
      		},
      		formatter: function(params) {
      			return params[0].data.isOff == 1 ? `<div style='color:red;'>断电开始时间<br/>
                                  ${params[0].data.offTime.split(' ')[0]}<br/>
                                  ${params[0].data.offTime.split(' ')[1]}</div>` : `<div>
                              <div>${params[0].data.name}</div>
                              <div style='display:flex;align-items:center;'>
                                  温度:<b>${params[0].data.value}℃</b>
                              </div>
                              <div style='display:flex;align-items:center;'>
                                  湿度:<b>${params[1].data.value}%</b>
                              </div>
                          </div>`
      		}
      	},
      	legend: {
      		left: "center",
      		top: "0%",
      		textStyle: {
      			color: '#fff',
      			fontSize: 14,
      			fontWeight: 600
      		},
      		data: ["湿度", "温度", "告警", "断电"]
      	},
      	grid: {
      		left: '2%',
      		right: '3%',
      		bottom: '10%',
      		top: '10%',
      		containLabel: true
      	},
      	xAxis: [{
      		type: 'category',
      		data: rq,
      		axisTick: {
      			show: false
      		},
      		axisLine: {
      			lineStyle: {
      				color: '#bbdce0'
      			}
      		},
      		axisLabel: {
      			// margin: 10,
      			textStyle: {
      				fontSize: 12,
      				color: "#bbdce0",
      				fontWeight: 600
      			}
      		},
      		splitArea: {
      			show: true,
      			areaStyle: {
      				color: ["rgba(250,250,250,0.08)", "rgba(250,250,250,0)"]
      			}
      		}
      	}, {
      		type: 'category',
      		boundaryGap: false,
      		axisLabel: {
      			show: false
      		}
      	}],
      	yAxis: [{
      		name: "(%)",
      		type: 'value',
      		splitLine: {
      			show: true,
      			lineStyle: {
      				type: "dashed",
      				color: ['rgba(58, 129, 132,.6)']
      			}
      		},
      		axisTick: {
      			show: false
      		},
      		axisLine: {
      			show: true,
      			lineStyle: {
      				fontSize: 12,
      				color: '#bbdce0',
      			}
      		},
      		axisLabel: {
      			textStyle: {
      				fontSize: 12,
      				color: "#bbdce0",
      				fontWeight: 600
      			}
      		},
      		max: 100
      	}, {
      		name: "(℃)",
      		type: 'value',
      		splitLine: {
      			show: false,
      			lineStyle: {
      				type: "dashed",
      				color: ['#39868a']
      			}
      		},
      		axisTick: {
      			show: false
      		},
      		axisLine: {
      			show: true,
      			lineStyle: {
      				fontSize: 12,
      				color: '#bbdce0',
      			}
      		},
      		axisLabel: {
      			textStyle: {
      				fontSize: 12,
      				color: "#bbdce0",
      				fontWeight: 600
      			}
      		},
      		max: 60
      	}],
      	series: [...seriesArr, {
      		name: "告警",
      		type: 'line',
      		data: [],
      		smooth: false,
      		symbolSize: 15,
      		symbol: 'circle',
      		showAllSymbol: true,
      		itemStyle: {
      			color: {
      				type: 'radial',
      				x: 0.5,
      				y: 0.5,
      				r: 0.5,
      				colorStops: [{
      						offset: 0,
      						color: `rgb(240, 128, 19)`, //中心颜色
      					},
      					{
      						offset: 0.4,
      						color: `rgb(240, 128, 19)`,
      					},
      					{
      						offset: 0.5,
      						color: '#ffffff00',
      					},
      					{
      						offset: 1,
      						color: '#ffffff00',
      					},
      				],
      			},
      			borderColor: `rgb(240, 128, 19)`,
      			borderWidth: 2,
      		},
      		label: {
      			show: false
      		},
      		lineStyle: {
      			type: "dashed",
      			color: `rgb(240, 128, 19)`,
      			width: 2,
      		}
      	}, {
      		name: "断电",
      		type: 'line',
      		data: [],
      		smooth: false,
      		symbolSize: 15,
      		symbol: 'circle',
      		showAllSymbol: true,
      		itemStyle: {
      			color: {
      				type: 'radial',
      				x: 0.5,
      				y: 0.5,
      				r: 0.5,
      				colorStops: [{
      						offset: 0,
      						color: `rgb(191, 53, 44)`, //中心颜色
      					},
      					{
      						offset: 0.4,
      						color: `rgb(191, 53, 44)`,
      					},
      					{
      						offset: 0.5,
      						color: '#ffffff00',
      					},
      					{
      						offset: 1,
      						color: '#ffffff00',
      					},
      				],
      			},
      			borderColor: `rgb(191, 53, 44)`,
      			borderWidth: 2,
      		},
      		label: {
      			show: false
      		},
      		lineStyle: {
      			type: "dashed",
      			color: `rgb(191, 53, 44)`,
      			width: 2,
      		}
      	}]
      };
        myChart.setOption(option);
    }
</script>

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1895138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

anaconda命令大全

目录 查看所有虚拟环境查看某虚拟环境安装的包创建虚拟环境激活创建好的虚拟环境回到之前的环境删除创建的虚拟环境查看conda所在的位置、虚拟环境位置等信息conda修改虚拟环境所在的位置 查看所有虚拟环境 conda env list查看某虚拟环境安装的包 激活要查看的虚拟环境之后&a…

欢乐钓鱼大师游戏攻略:在什么地方掉称号鱼?云手机游戏辅助!

《欢乐钓鱼大师》是一款融合了休闲娱乐和策略挑战的钓鱼游戏。游戏中的各种鱼类不仅各具特色&#xff0c;而且钓鱼过程充满了挑战和乐趣。下面将为大家详细介绍如何在游戏中钓鱼&#xff0c;以及一些有效的钓鱼技巧&#xff0c;帮助你成为一个出色的钓鱼大师。 实用工具推荐 为…

如何计算弧线弹道的落地位置

1&#xff09;如何计算弧线弹道的落地位置 2&#xff09;Unity 2021 IL2CPP下使用Protobuf-net序列化报异常 3&#xff09;编译问题&#xff0c;用Mono可以&#xff0c;但用IL2CPP就报错 4&#xff09;Wwise的Bank在安卓上LoadBank之后&#xff0c;播放没有声音 这是第393篇UWA…

oracle存储结构-----逻辑存储结构(表空间、段、区、块)

文章目录 oracle存储结构图&#xff08;逻辑存储物理存储&#xff09;oracle逻辑存储结构图逻辑存储结构、表空间、段、区、数据块的关系&#xff1a;1、数据 块&#xff08;block&#xff09;---逻辑存储最小单位2、 数据区&#xff08;extent&#xff09;--存储空间分配和回收…

使用 Git Hooks 防止敏感信息泄露

欢迎关注公众号&#xff1a;冬瓜白 在日常开发中&#xff0c;我们可能会不小心将敏感信息提交到 Git。为了防止这种情况&#xff0c;可以利用 Git Hooks 编写一个简单的脚本&#xff0c;当发现提交中包含敏感词时&#xff0c;给出提示。 以下是一个基于 pre-commit 钩子的示例…

记录在Linux(龙蜥8.6)配置jdk环境变量不生效问题

在Linux中&#xff0c;将jdk解压至 /opt/soft/jdk 目录中&#xff0c;使用root用户配置在/etc/profile中配置环境变量并source后&#xff0c;使用root用户是正常的&#xff0c;但是切换到普通用户后提示&#xff1a; 这个问题是普通用户对 /opt/soft/jdk 目录无执行权限 解决&…

面向对象-封装

一.包 1.简介 当我们把所有的java类都写src下的第一层级&#xff0c;如果是项目中&#xff0c;也许会有几百个java文件。 src下的文件会很多&#xff0c;开发的时候不方便查找&#xff0c;也不方便维护如果较多的文件中有同名的&#xff0c;十分麻烦 模块1中有一个叫test.ja…

汇聚荣拼多多评价好不好?

汇聚荣拼多多评价好不好?在探讨电商平台的口碑时&#xff0c;用户评价是衡量其服务质量和商品质量的重要指标。拼多多作为国内领先的电商平台之一&#xff0c;其用户评价自然成为消费者选择购物平台时的参考依据。针对“汇聚荣拼多多评价好不好?”这一问题&#xff0c;可以从…

Pinia:Vue 2 和 Vue 3 中更好用的状态管理框架

前言 还在用Vuex? 在Vue应用程序的开发过程中&#xff0c;高效且易于维护的状态管理一直是开发者关注的核心问题之一。随着Vue 3的发布&#xff0c;状态管理领域迎来了一位新星——Pinia&#xff0c;它不仅为Vue 3量身打造&#xff0c;同时也向下兼容Vue 2&#xff0c;以其简…

uni-appx,实现登录功能,弹窗功能。组件之间传值

这篇文章的内容使用组合式API实现的&#xff0c;只有弹窗部分有选择式API的写法介绍。如果想要看其他选择式API&#xff0c;还请下载官方的hello-uni-appx源码进行学习&#xff0c;查看。想要看组合式API的写法&#xff0c;请查看源码 hello-uvue。 hello-uni-appx源码 相比于…

JavaSE (Java基础):面向对象(下)

8.7 多态 什么是多态&#xff1f; 即同一方法可以根据发送对象的不同而采用多种不同的方式。 一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多。在句话我是这样理解的&#xff1a; 在实例中使用方法都是根据他最开始将类实例化最左边的类型来定的&…

http数据传输确保完整性和保密性整流程方案(含源码)

往期文章回顾 【深度学习】 【深度学习】物体检测/分割/追踪/姿态估计/图像分类检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统【深度学习】吸烟行为检测软件系统【深度…

element-ui el-select选择器组件下拉框增加自定义按钮

element-ui el-select选择器组件下拉框增加自定义按钮 先看效果 原理&#xff1a;在el-select下添加禁用的el-option&#xff0c;将其value绑定为undefined&#xff0c;然后覆盖el-option禁用状态下的默认样式即可 示例代码如下&#xff1a; <template><div class…

Maxwell 数据采集工具详解

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 欢迎关注微信公众号&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

修改头文件版本需要修改的文件

以修改ui的头文件版本为例&#xff0c;还需要同时更新 PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include\dsp PJ10PC20240120041_c928\components\master-t5\hikauto\incl…

文华财经T8多空量化交易策略模型源码

//定义变量 N : 3; // 连续K线数量&#xff08;可根据需要调整&#xff09; Q : 0.05; // 止盈比例5%&#xff08;可根据需要调整&#xff09; HIGH_PRICE : REF(HIGH, 1); // 记录前根阳线的最高价 LOW_PRICE : REF(LOW, 1); // 记录前根阴线的最低价 //做多策略 REF(EV…

开发国际短剧系统的策略解析

一、明确项目目标和需求 1、功能需求&#xff1a;确定系统应具备的基本功能&#xff0c;如用户注册、登录、浏览短剧、评论、分享、个性化推荐等。 2、性能需求&#xff1a;确保系统能够承受高并发访问&#xff0c;保证视频流畅播放&#xff0c;减少卡顿和延迟。 3、跨文化传播…

Redis基础教程(四):redis键(key)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

TCL中环可转债缩水近90亿:业绩持续承压,百亿自有资金购买理财

《港湾商业观察》廖紫雯 日前&#xff0c;TCL中环新能源科技股份有限公司&#xff08;以下简称&#xff1a;TCL中环&#xff0c;002129.SZ&#xff09;可转债总额缩水近90亿&#xff0c;引发市场关注。可转债大幅缩水的另一面&#xff0c;公司此前发布公告披露将使用百亿自有资…

内网渗透学习-杀入内网

1、靶机上线cs 我们已经拿到了win7的shell&#xff0c;执行whoami&#xff0c;发现win7是administrator权限&#xff0c;且在域中 执行ipconfig发现了win7存在内网网段192.168.52.0/24 kali开启cs服务端 客户端启动cs 先在cs中创建一个监听器 接着用cs生成后门&#xff0c;记…