echarts多个折线图共用一个x轴和tooltip组件

news2024/11/28 16:47:53

实现效果

根据接口传来的数据,使用echarts绘制出,共用一个x轴的图表
功能:后端将所有数据传送过来,前端通过监听选中值来展示对应的图表数据
在这里插入图片描述

数据格式:

在这里插入图片描述
在这里插入图片描述

代码:

<template>
  <div>
    <div class="screen-list-item">
      <span style="display: inline-block; width: 140px">量测类录波值选项:</span>
      <el-select
        multiple
        collapse-tags
        collapse-tags-tooltip
        style="width: 260px"
        clearable
        popper-class="select-box"
        :teleported="false"
        v-model="SensorListVal"
        placeholder="请输入量测"
        size="small"
        class="m-2"
      >
        <el-option
          v-for="item in SensorList.data"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        />
      </el-select>
    </div>
    <div
      id="FaultRecording1"
      style="width: 800px; height: 180px; margin: auto"
    ></div>
  </div>
</template>

<script>
// 引入echarts
import * as echarts from "echarts";
import { onMounted, reactive, ref, watch } from "vue";
// 调用接口数据
import { AllRecordDataApi } from "@/utils/record";
import { RecordPostBc } from "@/utils/request";

export default {
  setup() {
    let recordDataList = ref([]);
    let xseriesdata = ref([]);
    let SensorListVal = ref([]);
    let SensorList = reactive({
      data: [],
    });
    
    // 获取录波数据
    let recordData = async () => {
      const result = await RecordPostBc(AllRecordDataApi, {});
      console.log(result)
      // 找出数据中所有选项,为筛选框的选择项
      SensorList.data = result.list.map(obj => ({ value: obj.name, label: obj.name }) );
      // 图表数据
      recordDataList.value = result.list
      xseriesdata.value = result.time
      // 默认选择前两项
      SensorListVal.value = SensorList.data.slice(0, 2).map(item => item.value);
      recordEcharts1()
    }
    
    //绘制图表
    let recordEcharts1 = () => {
      let myChart = echarts.init(document.getElementById("FaultRecording1"));
      myChart.clear(); // 清除之前的图表实例

      let options = {
        grid: [
            // 第一个折线图
            {
                left: '3%',
                right: '4%',
                top: '10%',
                height: '32%',
            },
            // 第二个折线图
            {
                left: '3%',
                right: '4%',
                top: '50%',
                height: '32%',
            },
        ],
        tooltip: {
            trigger: 'axis', 
        },
        // 将上下两个tootip合成一个
        axisPointer: {
            link: { xAxisIndex: 'all' },
        },
        xAxis: [
            {
                type: 'category',
                scale: true,
                axisLabel: {
                    show: false,
                },
                data: xseriesdata.value, //x轴时间的数据
            },
            {
                gridIndex: 1,
                type: 'category',
                scale: true,
                data: xseriesdata.value, //x轴时间的数据
            },
        ],
        yAxis: [
            {
                type: 'value',
                scale: false,
                splitLine: {
                    show: false,
                },
            },
            {
                type: 'value',
                gridIndex: 1,
                scale: true,
                splitLine: {
                    show: false,
                },
            },
        ],
        dataZoom: [
          {
            show: true,
            realtime: true,
            start: 30,
            end: 70,
            xAxisIndex: [0, 1],
          },
          {
            type: "inside",
            realtime: true,
            start: 30,
            end: 70,
            xAxisIndex: [0, 1],
          },
        ],
        series: [],
      };
      // 添加每条曲线数据到 series 中
      for (var i = 0; i < recordDataList.value.filter(record => SensorListVal.value.includes(record.name)).length; i++) {
          options.series.push({
              xAxisIndex: i,
              yAxisIndex: i,
              name: recordDataList.value.filter(record => SensorListVal.value.includes(record.name))[i].name,
              type: 'line',
              smooth: 'true',
              data: recordDataList.value.filter(record => SensorListVal.value.includes(record.name))[i].data
          });
      }
      myChart.setOption(options);
      
    }
    
    onMounted(() => {
      recordData();
    });
    
    // 监听 SensorListVal 的变化
    watch(SensorListVal, (newValue, oldValue) => {
      recordEcharts1()
    });
    
    return { SensorList, SensorListVal  };
  },
};

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

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

相关文章

基于SpringCloud的菜谱美食交流系统Eureka

本技术是java平台的开源应用框架&#xff0c;其目的是简化Sping的初始搭建和开发过程。默认配置了很多框架的使用方式&#xff0c;自动加载Jar包&#xff0c;为了让用户尽可能快的跑起来spring应用程序。 本选题致力于开发一个菜谱交流系统&#xff0c;旨在帮助越来越多的人可以…

【计算机视觉】Gaussian Splatting源码解读补充

本文旨在补充gwpscut创作的博文学习笔记之——3D Gaussian Splatting源码解读。 Gaussian Splatting Github地址&#xff1a;https://github.com/graphdeco-inria/gaussian-splatting 论文地址&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gauss…

第六篇:视频广告格式上传指南(上) - IAB视频广告标准《数字视频和有线电视广告格式指南》

第六篇&#xff1a; 视频广告格式和上传指南&#xff08;上&#xff09; --- 我为什么要翻译介绍美国人工智能科技公司IAB系列技术标准&#xff08;2&#xff09; 流媒体数字视频的广告格式分为线性和非线性两大类。任何一个广告都可以与显示在视频播放器外部的伴随横幅一起提…

电脑数据安全新利器:自动备份文件的重要性与实用方案

一、数据安全的守护神&#xff1a;自动备份文件的重要性 在数字化时代&#xff0c;电脑中的文件承载着我们的工作成果、个人回忆以及众多重要信息。然而&#xff0c;数据丢失的风险无处不在&#xff0c;无论是硬件故障、软件崩溃&#xff0c;还是恶意软件的攻击&#xff0c;都…

nodejs基于vue班级管理系统的设计与实现-flask-django-python-php

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 1.学生功能&#xff1a;首页、个人中心、课程信息管理、学生成绩管理、班级事件管理、班费支出管理、班级相册管理、班级音乐角管理。 2.管理员功能&#xff1a;首页、个人中心、班级管理、…

Qt5.9.6+VS2015 部署PCL1.8.1

本文系转载&#xff0c;如侵权请告知删除。原博文链接&#xff1a;https://blog.csdn.net/jepco1/article/details/80752954 0 编译环境 所需软件包及其版本 Qt5.9.6 msvc2015_64 VS2015 VTK 8.0.0 https://gitlab.kitware.com/vtk/vtk/tree/v8.0.0 PCL1.8.1 https://github.c…

[PwnThyBytes 2019]Baby_SQL

[PwnThyBytes 2019]Baby_SQL 查看源码发现 下载源码&#xff0c;首先观察index.php 首先进入index.php&#xff0c;会执行session_start();启动session这里通过foreach将所有的环境变量的值都遍历了一遍&#xff0c;并且都使用了addslashes()进行转义&#xff0c;然后就定义了…

SpringCloud入门(1) Eureka Ribbon Nacos

这里写目录标题 认识微服务SpringCloud 服务拆分和远程调用服务拆分案例实现远程调用 RestTemplate Eureka注册中心Eureka的结构和作用搭建eureka-server服务注册服务发现 Ribbon负载均衡 LoadBalancedLoadBalancerIntercepor源码解析负载均衡策略饥饿加载 Nacos注册中心安装与…

【Node.js从基础到高级运用】十五、单元测试与集成测试

引言 在Node.js开发过程中&#xff0c;测试是确保代码质量和功能正确性的关键步骤。单元测试和集成测试是最常见的测试类型。下面我们将使用Jest框架来进行测试。 单元测试 单元测试是指对软件中的最小可测试单元进行检查和验证。在Node.js中&#xff0c;这通常指的是函数或者…

将html网页展示的图表,下载到PPT文档内,以图片的形式展示在PPT内

使用到的工具有&#xff1a; 开发工具&#xff1a;IDEA 报表开发工具&#xff1a;帆软10.0.19 1、针对帆软报表[普通报表]的设置 1.1首先选中在帆软里制作好的报表&#xff0c;选择模板web属性 1.2.选择数据分析模式&#xff0c;添加一个事件设置&#xff0c;该事件应该设置“…

抖音视频爬虫工具安装|视频无水印批量下载软件

抖音视频批量下载工具安装教程 想要快速、便捷地批量下载抖音视频吗&#xff1f;不用担心&#xff0c;我们为您提供了简单易行的安装教程&#xff0c;让您轻松体验抖音视频的下载乐趣。q1977470120跟随以下步骤&#xff0c;一起来安装抖音视频批量提取工具吧&#xff01; 步骤…

Android 系统源码中添加可执行程序

Android 系统源码中添加可执行程序 本文基本Android 10的源码环境 android 添加的可执行程序&#xff0c;可以分为两类&#xff1a; * C/C 可执行程序 * Java 可执行程序 &#xff08;jar&#xff09;在了解如何给 android 添加可执行程序前&#xff0c;我们需要了解一下ARM…

云原生相关知识

一、kubernetes 1 概述 Kubernetes&#xff08;也称 k8s 或 “kube”&#xff09;是一 个​​开源​​的容器编排平台&#xff0c;可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。 我们常说的编排的英文单词为 “Orchestration”&#xff0c;它常被解释…

Linux中,黑窗口使用vi编辑文件

linux用的比较少&#xff0c;一般我只用来部署项目的时候安装环境和传文件&#xff0c;好多乱七八糟的命令&#xff0c;好多东西&#xff0c;不会啊啊啊啊啊啊啊。 这个改文件几百年才用一次,我只想编辑一下文件&#xff0c;百度搜出来一大堆命令&#xff0c;各种模式什么的&am…

【JVM】如何判断堆上的对象没有被引用?

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的缺点-循环引用 引用计数法的优点是实现简单&…

qt-pdf-viewer-library 编译过程记录

1.qtpdfviewerinitializer.h 中 类模板问题需要修改为下面代码: https://github.com/develtar/qt-pdf-viewer-library 下载代码&#xff1a; 编译出现错误 修改代码&#xff0c;如下: 2.无法触发onViewerLoaded 事件&#xff0c;就是界面无法显示PDF文件 修改下面代码&#…

MySQL 搭建双主复制服务 并 通过 HAProxy 负载均衡

一、MySQL 搭建双主复制高可用服务 在数据库管理中&#xff0c;数据的备份和同步是至关重要的环节&#xff0c;而双主复制&#xff08;Dual Master Replication&#xff09;作为一种高可用性和数据同步的解决方案&#xff0c;通过让两个数据库实例同时充当主服务器和从服务器&…

WiFi是可以连接网络,但是在Pixel 手机上就连接提示受阻,无法上网-解决方法

1&#xff0c;通过USB连接手机&#xff0c;然后通过adb命令执行 adb shell settings delete global captive_portal_mode adb shell settings put global captive_portal_mode 0 adb shell settings get global captive_portal_mode adb shell settings delete global capti…

Java 设计模式系列:行为型-状态模式

简介 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;允许一个对象在其内部状态改变时改变其行为。状态模式中类的行为是由状态决定的&#xff0c;在不同的状态下有不同的行为。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂…

【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)

&#x1f48c; 所属专栏&#xff1a;【鸿蒙系统】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢…