echarts折线图单位为Bit/s的数据展示

需求:单位为Bit/s的数据需要换算y轴、legend和tooltip的单位;
显示数据时需要换算单位是因为数据以比特每秒(Bit/s)的形式返回,但是在实际展示中,可能更方便和易读的是使用其他单位,例如Gb/s、Mb/s、Kb/s等等

换算Y轴的单位:需要根据负 Y 轴关键字处理y轴刻度值,并将数据放在-y轴

实现思路:判断legend中是否含有negative_y_keyword关键字,含有的放到负轴,需要转成负数(后端返回的都是正数);换算y轴的单位

   data.value = props.series.metrics?.map((item: any, index: any) => {/* 判断legend中是否含有negative_y_keyword关键字,含有的放到正轴 */const isNegative = item.legend.includes(props.series.negative_y_keyword);return {name: item.legend,type: 'line',symbol: 'none',data: item.values.map((value: any) => {let yValue = parseInt(value[1], 10);if (isNegative === true) {yValue = -yValue;}return [value[0], yValue];}),color: color[index % 10],lineStyle: {width: 1, // 设置曲线的粗细,单位为像素},areaStyle: { opacity: 0.1 }, // 设置曲线阴影的透明度};});/* Bit/s的Y坐标轴数据单位转换 */const yAxisTransUnit = (total: number) => {if (total > 1000000000 || total < -1000000000) {return `${(total / 1000000000).toFixed(1)} Gb/s`;}if (total === 1000000000) {return `1 Gb/s`;}if (total === -1000000000) {return `-1 Gb/s`;}if (total < 1000000000 && total >= 1000000) {return `${(total / 1000000).toFixed(1)} Mb/s`;}if (total > -1000000000 && total <= -1000000) {return `${(total / 1000000).toFixed()} Mb/s`;}if (total === -1000000) {return `-1 Mb/s`;}if (total === 1000000) {return `1 Mb/s`;}return `${(total / 1000).toFixed(1)} Kb/s`;};

tooltip单位需要转换,都保持+值

  /* tooltip单位需要转换,都保持+值 */const transSpeedUnit = (total: number) => {const absTotal = Math.abs(total); // 获取绝对值if (absTotal > 1000000000) {return `${(absTotal / 1000000000).toFixed(2)} Gb/s`;}if (absTotal <= 1000000000 && absTotal >= 1000000) {return `${(absTotal / 1000000).toFixed(2)} Mb/s`;}return `${(absTotal / 1000).toFixed(2)} Kb/s`;};

legend需要计算avg,max,last值,并换算单位

/* 单位为Bit/s时对图例进行单位转换 */const mean =props.series.unit === 'Bit/s'? transSpeedUnit(calculateMean(values)): calculateMean(values).toFixed(2) + props.series.unit;const max =props.series.unit === 'Bit/s'? transSpeedUnit(Math.max(...values)): Math.max(...values) + props.series.unit;const last =props.series.unit === 'Bit/s'? transSpeedUnit(values[values.length - 1]): values[values.length - 1] + props.series.unit;

对图例的数值排序

1.先统一单位再排序,再换算单位(太麻烦了)

  /* 对图例数据排序 */const handleChange = (tableData: any, extra: any) => {if (extra.type === 'sorter' && extra.sorter) {const { direction, field } = extra.sorter;if (props.series.unit === 'Bit/s') {// 统一成bit/slegendList.value.forEach((item: any) => {item.mean = convertToBitsPerSecond(item.mean);item.max = convertToBitsPerSecond(item.max);item.last = convertToBitsPerSecond(item.last);});legendList.value.sort((a: any, b: any) => {const valueA = a[field];const valueB = b[field];if (direction === 'ascend') {return valueA - valueB;}if (direction === 'descend') {return valueB - valueA;}return 0;});// 格式化单位legendList.value.forEach((item: any) => {item.mean = transSpeedUnit(item.mean);item.max = transSpeedUnit(item.max);item.last = transSpeedUnit(item.last);});} else {legendList.value.sort((a, b) => {const valueA = parseFloat(a[field].replace('%', ''));const valueB = parseFloat(b[field].replace('%', ''));if (direction === 'ascend') {return valueA - valueB;}if (direction === 'descend') {return valueB - valueA;}return 0;});}}};

2.在视图处换算单位

<template #mean="{ record }"><spanv-if="props.series.unit !== 'Bit/s'":class="{ 'highlighted-row': !record.checked && data.length !== legendList?.length }">{{ record.mean }}{{ props.series.unit }}</span><spanv-else:class="{ 'highlighted-row': !record.checked && data.length !== legendList?.length }">{{ transUnit(record.mean, props.series.unit) }}</span></template>

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

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

相关文章

8 磁盘存储器的管理

外存的组织方式 连续组织方式&#xff1a;为每一个文件分配一组相邻接的盘块 链接组织方式&#xff1a;多个不连续的盘块 链接指针 隐式链接 显示链接&#xff1a;文件分配表FAT FAT技术&#xff1a; FAT12&#xff08;512B&#xff09;、以簇为单位的FAT12文件系统、FAT16、…

笔记:torch.roll

最近在准备写 swin transformer 的文章&#xff0c;记录下 torch.roll 的用法&#xff1a; >>> x torch.tensor([1, 2, 3, 4, 5, 6, 7, 8]).view(4, 2) >>> x tensor([[1, 2],[3, 4],[5, 6],[7, 8]]) 第0维度向下移1位&#xff0c;多出的[7,8]补充到顶部 &g…

【移动开发】iOS平台 Java编译器 Jedona Compiler 评测

上期编译器评测链接&#xff1a; Java Compiler IDE评测 一、使用平台 该编译器&#xff08;Jedona Compiler&#xff09;在苹果应用市场App Store中下载&#xff0c;笔者使用iPad进行Java代码编写。 应用市场界面&#xff1a; 二、开发界面介绍 开发界面比较简洁&#xf…

【JGit 】简述及学习资料整理

JGit 介绍 [官网](JGit | The Eclipse Foundation): https://www.eclipse.org/jgit/ 用户指南 : https://github.com/eclipse-jgit/jgit/wiki/User-Guide JGit是一个用于Java编程语言的开源Git实现。它提供了一组Java库和API&#xff0c;使开发人员可以在他们的Java应用程序…

python 与 neo4j 交互(py2neo 使用)

参考自&#xff1a;neo4j的python.py2neo操作入门 官方文档&#xff1a;The Py2neo Handbook — py2neo 2021.1 安装&#xff1a;pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple 1 节点 / 关系 / 属性 / 路径 节点(Node)和关系(relationship)是构成图的基础…

重磅!移远通信正式发布一站式XR产品解决方案,助力探索数字世界新纪元

伴随着以5G、大数据、云计算等现代化信息科技的发展&#xff0c;人类对数字世界、智慧地球的探索更加深入。尤其是以XR&#xff08;扩展现实&#xff09;为代表的技术崛起&#xff0c;更让物理世界与虚拟世界中的连接愈发紧密&#xff0c;千行百业也亟待新探索。 近日&#xff…

计算机组成原理(4)-----Cache的原理及相关知识点

目录 1.Cache的原理 2.Cache的性能 3.Cache和主存的映射方式 &#xff08;1&#xff09;全相联映射 &#xff08;2&#xff09;直接映射 &#xff08;3&#xff09;组相联映射 4.替换算法 (1)随机算法(RAND) (2)先进先出算法(FIFO) (3)近期最少使用(LRU) (4)最近不经…

论文阅读:How Do Neural Networks See Depth in Single Images?

是由Technische Universiteit Delft(代尔夫特理工大学)发表于ICCV,2019。这篇文章的研究内容很有趣,没有关注如何提升深度网络的性能&#xff0c;而是关注单目深度估计的工作机理。 What they find&#xff1f; 所有的网络都忽略了物体的实际大小&#xff0c;而关注他们的垂直…

使用 openssl 进行哈希计算

版本&#xff1a;OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022) SHAx 系列 如果对象完全存储在内存中&#xff0c;可以使用以下函数&#xff1a; #include <openssl/sha.h>unsigned char *SHA1(const unsigned char *data, size_t count, unsigned…

C#_WaitAll、WhenAll、async及await

Task.WhenAll、Task.WaitAll Task.WhenAll 和 Task.WaitAll 都是用于等待多个任务完成的方法&#xff0c;但它们之间有一些重要的区别。 返回类型: Task.WhenAll: 返回一个 Task 对象&#xff0c;该对象表示所有输入任务的联合任务。 Task.WaitAll: 没有返回值。它是一个同步方…

WEB APIs (4)

日期对象 实例化 代码中出现new关键字&#xff0c;创建时间对象 得到当前时间&#xff1a; const date new Date&#xff08;&#xff09; 获得指定时间&#xff1a; const date new Date&#xff08;‘2022-5-1’&#xff09; 方法作用说明getFullYear()获取年份获取…

前端算法题——字符串中的第一个唯一字符

前言 给定一个字符串&#xff0c;找到它的第一个不重复的字符&#xff0c;并返回它的索引。如果不存在&#xff0c;则返回 -1。 示例&#xff1a;s "leetcode" 返回 0s "loveleetcode" 返回 2// 提示&#xff1a;你可以假定该字符串只包含小写字母思路…

搜索专项---DFS之连通性模型

文章目录 迷宫红与黑 一、迷宫OJ链接 本题思路:DFS直接搜即可。 #include <iostream> #include <cstring> #include <algorithm>constexpr int N110;int n; char g[N][N]; bool st[N][N]; int x1, y1, x2, y2;int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, …

Python学习笔记——自定义函数(将函数存储在模块中及总结)

编写函数不仅可以做到代码复用&#xff0c;使用函数的一个特别好的优点是可将代码块与主程序分离。另外&#xff0c;不仅可以通过给函数指定描述性的名称&#xff0c;能让程序容易理解&#xff0c;还可以把函数存储在成为模块的独立文件中&#xff0c;再将模块导入&#xff08;…

数仓面试题整理(1)

什么是数据仓库&#xff1f; 答&#xff1a;数据仓库是一个集中式数据存储系统&#xff0c;用于集合、存储和分析来自不同源的大量数据。它支持决策制定过程&#xff0c;通过提供历史数据的统一视图&#xff0c;帮助组织进行复杂的查询和分析。 数据湖与数据仓库有什么区别&am…

2024 高级前端面试题之 计算机通识(基础) 「精选篇」

该内容主要整理关于 计算机通识&#xff08;基础&#xff09; 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 计算机基础精选篇 一、网络1.1 UDP1.2 TCP1.3 HTTP1.4 DNS 二、数据结构2.1 栈2.2 队列2.3 链表2.4 树2.5 堆 三、算法3.1 时…

使用 Nuxt 构建简单后端接口及数据库数据请求

写在前面 本文主要为大家介绍&#xff0c;如何使用 Nuxt 框架实现一个简单的后端接口&#xff0c;并且从数据库中请求数据返回给前端。 实现 创建 serverMiddleware 文件夹 首先我们新建一个名字为 serverMiddleware 文件夹用来存储接口相关信息 目录结构如下&#xff1a;…

汽车电子论文学习--电动汽车电机驱动系统动力学特性分析

关键重点&#xff1a; 1. 汽车的低速转矩存在最大限制&#xff0c;受附着力限制&#xff0c;因路面不同而变化。 2. 起步加速至规定转速的时间可以计算得到&#xff1a; 3. 电机额定功率的计算方式&#xff1a; 可以采取最高设计车速90%或120km/h匀速行驶的功率作为电机额定功…

如何区分期权,很简单WeTrade众汇教你两招

二元期权有许多变体&#xff0c;很多投资者难以区分外汇和二元期权&#xff0c;很简单WeTrade众汇教你两招1秒快速区分&#xff0c;我们可以根据这两个最重要的参数进行区分: 1)合同类型的范围 只有一种外汇合约。当然&#xff0c;你可以交易货币对、差价合约、商品或证券&am…

脉冲电流源测试旁路二极管热性能方案

热斑效应&#xff1a;太阳能电池一般是由多块电池组件串联或并联起来。串联支路中可能由于电池片内部缺陷或者外部遮挡&#xff0c;将被当作负载消耗其他有光照的太阳电池组件所产生的能量。被遮蔽的太阳电池组件此时会严重发热而受损。 旁路二极管&#xff1a;是指并联于太阳能…