格式化Echarts的X轴显示,设置显示间隔

news2024/12/28 20:27:08

业务需求:x轴间隔4个显示,并且末尾显示23时

x轴为写死的0时-23时,使用Array.from

data: Array.from({ length: 24 }).map((_, i) => `${i}时`)

需要在axisLabel 里使用 interval: 0, // 强制显示所有刻度标签,然后通过 formatter 函数控制只显示每 4 个刻度和最后一个刻度。

formatter(value, index) { if (index % 4 === 0 || index === 23) { // 每 4 个刻度显示一次,最后一个刻度始终显示 return value; } else { return ''; } } },

 表格的基础项chartOptions.js


import * as echarts from 'echarts';

export function chartOption() {
  return {
    title: {
      text: `X:时间(h) / Y:温度(℃)`,
      left: 'center',
      top: 0,
      textStyle: {
        fontSize: 14,
        fontFamily: 'MicrosoftYaHei',
        // color: '#1E5DFF',
      }
    },
    replaceMerge: ['series'],
    tooltip: {
      trigger: 'axis',
      axisPointer: {
        crossStyle: {
          color: '#999'
        }
      },
      backgroundColor: ,
      borderColor: ,
      textStyle: {
        color: 
      },
      formatter(params) {
        return `${params[0].axisValueLabel}:${params[0].value} ℃`
      }
    },
    grid: {
      containLabel: true,
      top: 30,
      left: 20,
      right: 20,
      bottom: 0
    },
    xAxis: [
      {
        type: 'category',
        axisLine: {
          onZero: false,
          lineStyle: {
            color: ,
          }
        },
        axisTick: {
          show: false
        },
        
        axisLabel: {
          textStyle: {
            color: ,
            fontSize: 12,
            fontFamily: 'PingFangSC-Regular, PingFang SC',
            fontWeight: 400,
            lineHeight: 17,
          },
          interval: 0, // 强制显示所有刻度标签
          formatter(value, index) {
            if (index % 4 === 0 || index === 23) { // 控制每 4 个刻度显示一次,最后一个刻度始终显示
              return value;
            } else {
              return '';
            }
          }
        },

        data: Array.from({ length: 24 }).map((_, i) => `${i}时`),
      }
    ],
    yAxis: [
      {
        type: "value",
        name: "℃",
        nameTextStyle: {
          padding: [0, -40, -23, -5], // 调整Y轴的单位位置
          color: ,
          fontSize: 12,
          fontFamily: 'PingFangSC-Regular, PingFang SC',
          fontWeight: 400,
          lineHeight: 17,
        },
        splitLine: {
          show: false,
        },
        axisTick: {
          show: false
        },
        axisLine: {
          show: true,
          lineStyle: {
            color: ,
          }
        },
        axisLabel: {
          show: true,
          textStyle: {
            color: ,
            fontSize: 12,
            fontFamily: 'PingFangSC-Regular, PingFang SC',
            fontWeight: 400,
            lineHeight: 17,
          }
        },
      },
    ],
    series: [
      {
        name: "",
        type: "line",
        smooth: true, //平滑曲线显示
        symbol: "none", // 去掉圆点
        lineStyle: {
          color: "#00FFB8",
          width: 2,
        },
        data: []
      },
    ]
  }
};

表格的数据结构

backupTempTableData: [
        { timeName1: '0时', tempValue1: '0.00', timeName2: '8时', tempValue2: '0.00', timeName3: '16时', tempValue3: '00.00' },
        { timeName1: '1时', tempValue1: '0.00', timeName2: '9时', tempValue2: '0.00', timeName3: '17时', tempValue3: '00.00' },
        { timeName1: '2时', tempValue1: '0.00', timeName2: '10时', tempValue2: '0.00', timeName3: '18时', tempValue3: '00.00' },
        { timeName1: '3时', tempValue1: '0.00', timeName2: '11时', tempValue2: '0.00', timeName3: '19时', tempValue3: '00.00' },
        { timeName1: '4时', tempValue1: '0.00', timeName2: '12时', tempValue2: '0.00', timeName3: '20时', tempValue3: '00.00' },
        { timeName1: '5时', tempValue1: '0.00', timeName2: '13时', tempValue2: '0.00', timeName3: '21时', tempValue3: '00.00' },
        { timeName1: '6时', tempValue1: '0.00', timeName2: '14时', tempValue2: '0.00', timeName3: '22时', tempValue3: '00.00' },
        { timeName1: '7时', tempValue1: '0.00', timeName2: '15时', tempValue2: '0.00', timeName3: '23时', tempValue3: '00.00' },
      ],

后台请求的数据是一个数组[ ],表示0-23时的数据,所以需要把数组的值赋值给表格,

[
  45.1,
  45.11,
  45.12,
  45.13,
  45.14,
  45.15,
  45.16,
  45.17,
  45.18,
  45.19,
  45.2,
  45.21,
  45.22,
  45.23,
  45.24,
  45.25,
  45.26,
  45.27,
  45.28,
  45.29,
  45.3,
  "",
  "",
  ""
]

     initData() {
        // 请求数据库值
        getCmdInitData().then(res => {
          const varr = res?.data; // []
          state.backupTempTableData.forEach((item, index) => {
             item.tempValue1 = Number(varr[index]).toFixed(2) || '0.00'
             item.tempValue2 = Number(varr[index + 8]).toFixed(2) || '0.00'
             item.tempValue3 = Number(varr[index + 16]).toFixed(2) || '0.00'
           })
          }
        })
      },

当表格的数据修改后,需要重新把表格数据再提取成数组,赋值给Y轴

     <!-- 表格设置 -->
          <vxe-table border stripe :data="timeTempTable" :edit-config="{ trigger: 'click', mode: 'cell' }">
            <vxe-column field="timeName1" title="时间" width="60" align="center"></vxe-column>
            <vxe-column field="tempValue1" title="温度℃" width="90" align="center" :edit-render="{ autofocus: '' }">
              <template #edit="{ row }">
                <vxe-input v-model="row.tempValue1" type="float" digits="2" :min="-100" :max="100"
                  placeholder="0.00"></vxe-input>
              </template>
            </vxe-column>
            <vxe-column field="timeName2" title="时间" width="60" align="center"></vxe-column>
            <vxe-column field="tempValue2" title="温度℃" width="90" align="center"
              :edit-render="{ autofocus: '.vxe-input--inner' }">
              <template #edit="{ row }">
                <vxe-input v-model="row.tempValue2" type="float" digits="2" :min="-100" :max="100"
                  placeholder="0.00"></vxe-input>
              </template>
            </vxe-column>
            <vxe-column field="timeName3" title="时间" width="60" align="center"></vxe-column>
            <vxe-column field="tempValue3" title="温度℃" width="90" align="center"
              :edit-render="{ autofocus: '.vxe-input--inner' }">
              <template #edit="{ row }">
                <vxe-input v-model="row.tempValue3" type="float" digits="2" :min="-100" :max="100"
                  placeholder="0.00"></vxe-input>
              </template>
            </vxe-column>
          </vxe-table>

<Echart :options="lineChartData" ref="echartRef" />

import { chartOption } from './chartOptions'
echartRef: null,
lineChartData: {},
backupTempTableData: [
        { timeName1: '0时', tempValue1: '0.00', timeName2: '8时', tempValue2: '0.00', timeName3: '16时', tempValue3: '00.00' },
        { timeName1: '1时', tempValue1: '0.00', timeName2: '9时', tempValue2: '0.00', timeName3: '17时', tempValue3: '00.00' },
        { timeName1: '2时', tempValue1: '0.00', timeName2: '10时', tempValue2: '0.00', timeName3: '18时', tempValue3: '00.00' },
        { timeName1: '3时', tempValue1: '0.00', timeName2: '11时', tempValue2: '0.00', timeName3: '19时', tempValue3: '00.00' },
        { timeName1: '4时', tempValue1: '0.00', timeName2: '12时', tempValue2: '0.00', timeName3: '20时', tempValue3: '00.00' },
        { timeName1: '5时', tempValue1: '0.00', timeName2: '13时', tempValue2: '0.00', timeName3: '21时', tempValue3: '00.00' },
        { timeName1: '6时', tempValue1: '0.00', timeName2: '14时', tempValue2: '0.00', timeName3: '22时', tempValue3: '00.00' },
        { timeName1: '7时', tempValue1: '0.00', timeName2: '15时', tempValue2: '0.00', timeName3: '23时', tempValue3: '00.00' },
      ],


 initData() {
        // 请求数据库值,赋值给表格
        getCmdInitData().then(res => {
          const varr = res?.data; // []
          state.backupTempTableData.forEach((item, index) => {
             item.tempValue1 = Number(varr[index]).toFixed(2) || '0.00'
             item.tempValue2 = Number(varr[index + 8]).toFixed(2) || '0.00'
             item.tempValue3 = Number(varr[index + 16]).toFixed(2) || '0.00'
           })
          }
        })
      },


// Y轴数据转换为数组
      getYData(data) {
        let result1 = [];
        let result2 = [];
        let result3 = [];
        let yData = []
        // 循环遍历每个对象
        for (const obj of data) {
          const temp1 = obj.tempValue1 || '0.00'
          const temp2 = obj.tempValue2 || '0.00'
          const temp3 = obj.tempValue3 || '0.00'
          result1.push(temp1);
          result2.push(temp2);
          result3.push(temp3);
        }
        yData = [...result1, ...result2, ...result3]
        return yData;
      },
    }

    // 监听table数据更新,刷新下发命令体内容
    watch(
      () => state.backupTempTableData,
      () => {
        state.lineChartData = chartOption();
        let yData = methods.getYData(state.backupTempTableData)
        // console.log(yData, '--yData--');
        set(state.lineChartData, 'series[0].data', yData); // 设置y轴数据
      }, {
        deep: true,
      }
    )

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

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

相关文章

Java集合(六)Hashtable、ConcurrentHashMap

文章目录 Hashtable一、Hashtable介绍1.1 Hashtable是什么1.2 Hashtable特点1.3 Hashtable常见方法 二、Hashtable源码分析2.1 节点2.2 构造方法2.3 获取元素2.4 存入元素2.5 判断是否包含某个key/value2.6 替换元素2.7 删除元素2.8 获取value集合2.9 哈希2.10 扩容 Concurrent…

ADUM1200ARZ数字隔离器:重新定义技术标准

ADUM1200ARZ数字隔离器成为技术进步领域的关键组件。其创新设计和多方面功能重新定义了数字隔离技术的格局&#xff0c;提供了满足不同工业需求的众多功能。让我们通过本文直观的了解ADUM1200ARZ的功能与技术标准。 窄体且符合ROHS&#xff1a;设定新基准 该数字隔离器采用窄体…

HNU-数据库系统-实验2-数据库安全性/完整性定义与检查

数据库系统 课程实验2数据库安全性/完整性定义与检查 计科210X 甘晴void 202108010XXX 目录 文章目录 数据库系统 课程实验2<br>数据库安全性/完整性定义与检查实验目的实验环境实验内容2.1数据库安全性2.1.1 自主存取控制实验1&#xff09;实验内容与要求2&#xff0…

verilog语法进阶-分布式ram原语

概述 官方提供的原语 RAM16X1S_1 #(.INIT(16h0000) // Initial contents of RAM) RAM16X1S_1_inst (.O(O), // RAM output.A0(A0), // RAM address[0] input.A1(A1), // RAM address[1] input.A2(A2), // RAM address[2] input.A3(A3), // RAM address[3…

数据结构-迷宫问题

文章目录 1、题目描述2、题目分析3、代码实现 1、题目描述 题目链接&#xff1a;迷宫问题 、 注意不能斜着走&#xff01; 2、题目分析 &#xff08;1&#xff09;0为可以走&#xff0c;1不能走且只有唯一一条通路 &#xff08;2&#xff09;我们可以通过判断上下左右来确定…

基于ssm电子资源管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 环境&#xff1a; jdk8 tomcat8.5 基于ssm电子资源管理系统源码和论文758 摘要 随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门…

微信公众号怎样使用文章模版?怎样建立文章模版 公众号模版示例 如何使用

打开我们的微信公众平台并登陆&#xff0c;找到我们的管理->素材管理 如图所示 2 在新建图文素材的右边有三个点&#xff0c;我们把鼠标移动到此处并点击 我们会看到新建分享图文和管理图文模版 选中并点击管理图文模版 如图所示 3 我们会看到如下界面 如图所示 4 …

【C++入门到精通】 线程库 | thread类 C++11 [ C++入门 ]

阅读导航 引言一、thread类的简单介绍二、线程函数详细介绍1. start() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型 2. join() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型 3. detach() 函数&#xff08;1&#xff09;头…

列表优先于数组

在Java中&#xff0c;列表&#xff08;List&#xff09;通常优于数组&#xff0c;因为列表提供了更灵活的操作和动态调整大小的能力。下面是一个例子&#xff0c;展示了为什么在某些情况下使用列表比数组更好&#xff1a; import java.util.ArrayList; import java.util.List;…

交友网站的设计与实现(源码+数据库+论文+开题报告+说明文档)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

1125矩阵乘法(C语言)

一&#xff1a;题目 二&#xff1a;思路分析 1.对于学习过线性代数的人来说&#xff0c;对应公式十分熟悉&#xff0c;而对于没接触过线性代数的人来说&#xff0c;我们地一步要做的是从题目所给的公式中找规律 2.这个题目&#xff0c;给了我们三个变量n&#xff0c;m&#xf…

图扑物联 | WEB组态可视化软件

什么是组态&#xff1f; 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xff0c;可理解为“配置”、“设置”等&#xff0c;是指通过人机开发界面&#xff0c;用类似“搭积木”的简单方式来搭建软件功能&a…

运营微信视频号要注意哪些问题?

视频号运营的5个雷点你别踩! 今天和你说的视频号运营的5大雷点 你踩过没? 这5点虽然和野花似的 但也不能踩哦 雷点1:违规行为 雷点2:抄袭剽窃 雷点3:没有明确目标受众 雷点4:短视频质量过低 雷点5:缺少社交互动 相信不管是视频号还是别的平台都通用哈

QML中Image动态显示图片内容

1.定义一个ColorImageProvider类 #ifndef COLORIMAGEPROVIDER_H #define COLORIMAGEPROVIDER_H#include <QObject> #include <QImage> #include <QQuickImageProvider>#include <QTimer>class ColorImageProvider :public QObject, public QQuickImag…

26.Java安卓程序设计-基于SSM框架Android的网店系统设计与实现

1. 引言 1.1 背景 介绍网店系统的背景&#xff0c;说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的Android网店系统的目标和意义。 2. 需求分析 2.1 行业背景 分析网店行业的特点和需求&#xff0c;以及目前市场上同类系统的不足之处。 …

docker consul 容器的自动发现与注册

consul相关知识 什么是注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&#xff0c;起初的…

基于ssm果蔬经营平台系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

Pygame游戏实战九:跳跃小游戏

介绍模块 本游戏使用的是由Pycharm中的pygame模块来实现的&#xff0c;也可以在python中运行。通过Pygame制作一个类似与跳跃游戏&#xff0c;但在游戏中并没有进行跳跃&#xff0c;而是通过键盘进行控制。 最小开发框架 详情请看此文章&#xff1a;Pygame游戏模块介绍二&am…

在4*4的平面上计算2a1+1+1

0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 在4*4的平面上有2个点&#xff0c;保持2a1的结构&#xff0c;然后向剩余的14个格子里随机扔2个石子。 共有14*13/291种可能 1 - - - 2 - - - 3 - - 1 4 - - - 1 1 - 1 1 - - - - - - - 1 - - …

生产环境_Apache Spark技术大牛的实践:使用DataFrame API计算唯一值数量并展示技术(属性报告)

业务背景 给前端提供算法集成好的数据&#xff0c;对算法处理后的数据进行进一步删选展示 可以使用下面代码运行一下看看结果&#xff0c;听有趣的&#xff0c;我写的代码中计算了不同字段的值的数量&#xff0c;并生成了一个显示字符串来描述这些数据的分布情况然后使用"…