echarts 几千条分钟级别在小时级别图标上展示

news2024/9/20 9:08:43

  • 需求背景
  • 解决效果
  • ISQQW代码地址
  • strategyChart.vue

需求背景

需要实现 秒级数据几千条在图表上显示,(以下是 设计图表上是按小时界别显示数据,后端接口为分钟级别数据)
1232323

解决效果

在这里插入图片描述

ISQQW代码地址

链接

strategyChart.vue

<!--/**
* @author: liuk
* @date: 2023/11/21
* @describe: 描述
* @email:1229223630@qq.com
*/-->
<template>
  <div ref="chatDom" class="strategyChart"></div>
</template>

<script lang="ts" setup>
import {ref, onMounted, watch, nextTick} from "vue"
import * as echarts from 'echarts'

// Props
const props = defineProps(['data', 'type'])

let myChart = null // Vue3 使用 proxy 对象代理,而 echarts 则使用了大量的全等(===), 对比失败从而导致了bug。
const chatDom = ref(null)

watch(() => props.data, (data: any) => {
  nextTick(() => {
    const option = myChart.getOption()
    myChart.clear()
    myChart.setOption(renderFn(option, data, props.type))
  })
}, {deep: true})

onMounted(() => {
  drawChart()
  window.addEventListener('resize', () => {
    const option = myChart.getOption()
    myChart.clear()
    myChart.setOption(renderFn(option, props.data, props.type))
  }, {passive: true});
})

const renderFn = (option, data, type) => {
  switch (type) {
    case 1:
      option.legend[0].data = ['当前二供温', '目标二供温']
      option.yAxis[0].name = '单位/℃'
      option.series[0].name = '当前二供温'
      option.series[0].data = data.tt211_value
      option.series[0].color = '#3A68C0'
      option.series[1].name = '目标二供温'
      option.series[1].data = data.tt211_balanced_forecast
      option.series[1].color = '#FFBF00'
      option.series[1].lineStyle.type = 'dashed'
      return option
    case 2:
      option.legend[0].data = ['反馈阀开度', '设定阀开度', "预测阀开度"]
      option.yAxis[0].name = '单位/%'
      option.series[0].name = '反馈阀开度'
      option.series[0].data = data.cov121_value
      option.series[0].color = '#3A68C0'
      option.series[1].name = '设定阀开度'
      option.series[1].data = data.cov121_forecastset
      option.series[1].color = '#FFBF00'
      option.series[2].name = '预测阀开度'
      option.series[2].data = data.cip121_hz_forecast
      option.series[2].color = '#FFBF00'
      option.series[3] = {
        name: '',
        symbol: 'image://',
        type: 'line',
        color: '2c2c2c',
        showSymbol: false,
        connectNulls: false,
        data: curData,
        areaStyle: {
          color: '#2c2c2c'
        },
        lineStyle: {
          width: 2,
          type: 'dotted'
        },
      }
      return option
    case 3:
      option.legend[0].data = ['实际频率', '预测频率']
      option.yAxis[0].name = '单位/Hz'
      option.series[0].name = '实际频率'
      option.series[0].data = data.cip121_hz
      option.series[0].color = '#3A68C0'
      option.series[1].name = '预测频率'
      option.series[1].data = data.cip121_hz_forecast
      option.series[1].color = '#FFBF00'
      option.series[1].lineStyle.type = 'dashed'
      return option
  }
}
// 当前天 24小时数据
const curData = new Array(27).fill([]).map((_, i) => {
  const cur0Date = new Date(new Date().toLocaleDateString()).setHours(0) // 当天0点时间戳 秒级
  return [cur0Date + (i - 1) * 60 * 60 * 1000, '-']
})
const drawChart = () => {
  let chartDom = chatDom.value
  if (chartDom == null) {
    return
  }
  echarts.dispose(chartDom)
  myChart = echarts.init(chartDom)
  const option = {
    legend: {
      bottom: 0,
      data: [],
      textStyle: {
        color: '#929394'
      },
    },
    tooltip: {
      trigger: 'axis',
      borderColor: 'rgba(255,255,255,.1)',
      backgroundColor: 'rgba(149, 149, 149, 0.11)',
      extraCssText: '0px 2px 8px 0px rgba(0,0,0,0.3); backdrop-filter: blur(8px);',
      textStyle: {
        color: '#fff'
      },
    },
    grid: {
      left: '2.5%',
      top: '15%',
      right: '0.8%',
      bottom: '10%',
      containLabel: true
    },
    xAxis: [
      {
        type: 'time',
        show: true,
        axisLine: {
          show: true,
          lineStyle: {
            width: 2,
            color: 'rgba(80,80,80,1)'
          }
        },
        axisTick: {
          show: true,
          alignWithLabel: true, // 将刻度线与标签对齐
        },
        axisLabel: {
          color: 'rgba(165,166,166,1)',
          fontSize: '14',
          formatter: (val) => {
            const date = new Date(val)
            const isNow = date.getHours() === new Date().getHours()
            return isNow ? 'now' : String(date.getHours()).padStart(2, '0') + ':00'
          }
        },
        axisPointer: {
          label: {
            formatter: function (params) {
              const date = new Date(params.value)
              const y = date.getFullYear()
              const m = date.getMonth() + 1 < 10 ? ('0' + date.getMonth() + 1) : date.getMonth() + 1
              const d = date.getDate() < 10 ? ('0' + date.getDate()) : date.getDate()
              const hours = date.getHours() < 10 ? ('0' + date.getHours()) : date.getHours()
              const minutes = date.getMinutes() < 10 ? ('0' + date.getMinutes()) : date.getMinutes()
              var seconds = date.getSeconds()
              return `${y}-${m}-${d}` + ` ${hours}:${minutes}:${seconds}`
            }
          }
        },
      }
    ],
    yAxis: [
      {
        name: '单位/%',
        type: 'value',
        show: true,
        offset: 5,
        nameTextStyle: {
          padding: [0, 35, 10, 0],
          color: 'rgba(165,166,166,1)',
          fontSize: '12',
        },
        splitLine: {
          show: true,
          lineStyle: {
            type: 'dashed',
            color: 'rgba(52,52,52,1)'
          }
        },
        axisLabel: {
          color: 'rgba(165,166,166,1)',
          fontSize: '12',
        },
      }
    ],
    series: [
      {
        name: '反馈阀开度',
        symbol: 'image://',
        type: 'line',
        color: "rgba(255,191,0,1)",
        showSymbol: false,
        connectNulls: false,
        data: curData,
        areaStyle: {
          color: 'rgba(255,191,0,0)'
        },
        lineStyle: {
          width: 2,
          type: 'solid'
        },
      },
      {
        name: '设定阀开度',
        symbol: 'image://',
        type: 'line',
        color: 'red',
        showSymbol: false,
        connectNulls: false,
        data: curData,
        areaStyle: {
          color: 'rgba(255,191,0,0)'
        },
        lineStyle: {
          width: 2,
          type: 'solid'
        },
      },
      {
        name: '',
        symbol: 'image://',
        type: 'line',
        color: '2c2c2c',
        showSymbol: false,
        connectNulls: false,
        data: curData,
        areaStyle: {
          color: '2c2c2c'
        },
        lineStyle: {
          width: 2,
          type: 'dotted'
        },
      },
    ]
  }
  option && myChart.setOption(option)
}
</script>

<style lang="scss" scoped>
.strategyChart {
  width: 100%;
  height: 100%;
  margin-top: 5px;
}
</style>
<style lang="scss">
.detailChat-popup {
  overflow: hidden;
  margin: 3px 10px;

  .top {
    margin-bottom: 16px;
  }

  .item {
    display: flex;
    align-items: center;
    margin: 10px 0;

    &:last-child {
      margin-bottom: 0;
    }

    .icon {
      display: inline-block;
      width: 12px;
      text-align: center;
      margin-right: 10px;
    }

    .name {
      margin-right: 20px;
    }
  }
}
</style>

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

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

相关文章

拿下!这些证书可以帮你职场晋升!(PMP/CSPM/NPDP)

PMP证书为项目管理道路打好基础&#xff0c;建立规划思维&#xff0c;整合思维&#xff0c;提高解决问题效率。中国也有自己的项目管理认证CSPM&#xff0c;与PMP相比难度较小&#xff0c;可用已获得的证书免考。NPDP认证拓宽视野&#xff0c;帮助项目经理提升技能。 01PMP为项…

基于文心一言AI大模型,编写一段python3程序以获取华为分布式块存储REST接口的实时数据

本文尝试基于文心一言AI大模型&#xff0c;编写一段python3程序以获取华为分布式块存储REST接口的实时数据。 一、用文心一言AI大模型将需求转化为样例代码 1、第一次对话&#xff1a;“python3写一段从rest服务器获取数据的样例代码” 同时生成了以下注解 这段代码首先定义…

2023年亚太杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

银河麒麟V10-ARM架构-postgresql安装与部署指南

提示&#xff1a;本人长期接收外包任务。 前言 本文详细介绍应用源码进行pgsql的安装步骤&#xff0c;本文以postgresql-12.0为例。 一、下载并解压安装包 ☆下载地址&#xff1a;https://ftp.postgresql.org/pub/source/ 解压安装包&#xff0c;创建安装路径&#xff1a; …

产品需求分析师的基本职责(合集)

产品需求分析师的基本职责1 职责 1、主要对用友司库云产品进行调研及产品规划; 2、根据司库云业务需求进行详细需求的用户故事、原型设计、需求分析、详细需求文档编写等; 3、进行产品的需求管理、需求验证、产品演示等需求工作; 4、配合开发、UE人员完成对产品的开发任务;…

了解CCC认证流程,确保产品合规通过

CCC认证是指中国强制性产品认证制度&#xff0c;也是中国国家质量监督检验检疫总局实施的一项重要认证制度。对于想要在中国市场销售的产品来说&#xff0c;CCC认证是必不可少的步骤。本文将详细介绍CCC认证的流程&#xff0c;帮助您了解并确保产品顺利通过认证。 第一步&#…

【React-Router】路由导航

1. 概念 路由系统中的多个路由之间需要进行路由跳转&#xff0c;并且在跳转的同时有可能需要传递参数进行通信。 2. 声明式导航 // /page/Login/index.jsimport { Link } from react-router-dom const Login () > {return <div>登录页{/* 解析成 a 链接 */}<Li…

CentOS7 FTP服务创建

一、安装FTP sudo dnf install vsftpd 二、设置防火墙&#xff0c;允许访问FTP //给防火墙增加一个允许的ftp服务(--permanent永久生效,重启后依然生效) sudo firewall-cmd --permanent --zonepublic --add-serviceftp//修改完后需要重启防火墙 sudo firewall-cmd --reload …

C#使用whisper.net实现语音识别(语音转文本)

目录 介绍 效果 输出信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/sandrohanea/whisper.net Whisper.net. Speech to text made simple using Whisper Models 模型下载地址&#xff1a;https://huggingface.co/sandrohanea/whisper.net/tree…

【kubernetes】k8s架构之节点

文章目录 1、集群架构示意图2、概述3、管理3.1 节点名称唯一性3.2 节点自注册3.3 手动节点管理 4、节点状态4.1 地址&#xff08;Addresses&#xff09;4.2 状况&#xff08;Condition&#xff09;4.3 容量&#xff08;Capacity&#xff09;与可分配&#xff08;Allocatable&am…

java:application.properties的详细使用以及区分环境

文章目录 什么是application.properties文件&#xff1f;如何在Java中使用application.properties文件&#xff1f;将数据注入到 Bean 中使用自定义的配置文件使用命令行参数进行配置配置文件的优先级加载外部的配置文件多环境配置1、创建配置文件2、在 application.properties…

Python语言:猜数字游戏案例讲解

猜数字游戏题目要求如下&#xff1a;该程序随机生成一个1到100之间的整数&#xff0c;然后要求玩家在有限的次数内猜出这个数字。如果玩家猜对了&#xff0c;游戏结束并显示成功信息&#xff1b;如果玩家猜错了&#xff0c;程序会提示玩家猜的数字是偏大还是偏小&#xff0c;并…

OpenLayers实战,WebGL图层根据Feature要素的变量动态渲染多种颜色、不同长度和不同透明度的长方形(矩形)图形,适用于大量矩形图形渲染

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers根据Feature要素的变量动态渲染多种颜色、不同长度和不同透明度的矩形(长方形、四边形和正方形)图形。 通过一个WebGL图层生成四种不同颜色、不同大小和不同透明度的矩形图形要素,适用于WebGL图层根据大量点…

ATFX汇市:非美货币扎堆升值,唯有USDCAD表现平平

ATFX汇市&#xff1a;10月4日至今&#xff0c;美元指数累计跌幅已经超过3.6%&#xff0c;最低触及103.18点&#xff0c;中期均线MA30被跌破&#xff0c;强势周期可能即将转变为弱势周期。随着美元的下跌&#xff0c;大部分非美货币快速升值&#xff0c;欧元、英镑、日元的升值幅…

以45°斜抛水平距离最远

已知&#xff1a;斜抛物体的初速度为 v 0 v_0 v0​&#xff08;与水平方向的夹角为 θ \theta θ&#xff09;&#xff0c;重力加速度为 g g g。 求&#xff1a;抛物轨迹方程&#xff1f; 垂直方向的速度为 v y v 0 sin ⁡ θ − g t v_yv_0 \sin \theta -gt vy​v0​sinθ−…

modbus协议及modbus TCP协议

一、Modbus协议 1.起源 Modbus由Modicon公司于1979年开发&#xff0c;是一种工业现场总线协议标准。 Modbus通信协议具有多个变种&#xff0c;其中有支持串口&#xff0c;以太网多个版本&#xff0c;其中最著名的是Modbus RTU&#xff08;通信效率最高&#xff0c;基于串口&am…

读不懂客户,就不足以谈商业成功

数字化的背后&#xff0c;是对顾客心理和行为的深度洞察。因此&#xff0c;品牌营销运营数字化&#xff0c;不仅仅是为了收集转化率数据&#xff0c;也需要通过设计数据指标&#xff0c;更深地了解顾客。 门店管理也是如此&#xff0c;打造未来空间的数智化管理方式&#xff0c…

中低压MOSFET 2N7002T 60V 300mA 双N通道 SOT-523封装

2N7002KW小电流双N通道MOSFET&#xff0c;电压60V电流300mA&#xff0c;采用SOT-523封装形式。低Ros (on)的高密度单元设计&#xff0c;压控小信号开关&#xff0c;具有高饱和电流能力&#xff0c;ESD保护。可应用于直流/直流转换器&#xff0c;电池开关&#xff0c;便携式设备…

IDEA 配置maven结合案例使用篇

1. 项目需求和结构分析 需求案例&#xff1a;搭建一个电商平台项目&#xff0c;该平台包括用户服务、订单服务、通用工具模块等。 项目架构&#xff1a; 用户服务&#xff1a;负责处理用户相关的逻辑&#xff0c;例如用户信息的管理、用户注册、登录等。 spring-context 6.0.…

CentOS 7 升级gcc/g++ 至7.3、8.3、9.3

功能需求&#xff1a;CentOS 7 编译安装spdlog-1.12.0 提示如下错误信息&#xff1a; [rootlocalhost build]# cmake .. && make -j -- Build spdlog: 1.12.0 -- Build type: Release -- Generating example(s) -- Generating install -- Configuring done -- Generat…