当前位置: 首页 > news >正文

echarts处理y轴最大小值根据数据动态处理、分割数和是否从0开始

方法

/*** 取整* @param value 输入值* @param scale 保留位数 正数是整数位,负数是小数位* @param isUpper true 向上取整  false向下取整* @returns*/
const numberFix = (value, scale, isUpper) => {const moreThanZero = value >= 0value = Math.abs(value)if (scale == 0) {return value}if (scale > 0) {scale -= 1}let resultif (moreThanZero) {result =numberFloorOrCeil(value / Math.pow(10, scale), isUpper) *Math.pow(10, scale)} else {result =-1 *numberFloorOrCeil(value / Math.pow(10, scale), !isUpper) *Math.pow(10, scale)}if (scale < 0) {result =numberFloorOrCeil(result * Math.pow(10, -1 * scale), isUpper) /Math.pow(10, -1 * scale)}return result}const numberFloorOrCeil = (value, isUpper) => {if (isUpper) {return Math.ceil(value)} else {return Math.floor(value)}}/*** 得到数字的尺寸* 0=>1* 5=>1* 10=>2* 123=>3* 0.5=>-1* 0.003=>-3* @param value* @returns {number}*/const getNumberMaxScale = value => {const moreThanZero = value >= 0let absValue = Math.abs(value)if (absValue >= 1) {const valueStr = absValue + ''return valueStr.split('.')[0].length} else if (absValue > 0) {let scale = 0while (absValue < 1) {absValue *= 10scale -= 1}return scale} else {// 为0return 1}}/**** @param valueArr 对象数组* @param splitNum 分割线数量* @param fromZero 是否从0开始* @param splitSmallerScale 分割数取整减少位数* @param splitMinScale 1是个位 2是10位,-1表示0.1级别,-2表示0.01级别,-3表示0.001级别; null就是不启用这个功能* @returns {{min: number, max: number, interval: number}}*/const echartsSplit = (valueArr,splitNum = 5,fromZero = true,splitSmallerScale = 0,splitMinScale = null) => {valueArr = [...valueArr]if (fromZero) {valueArr.push(0)}let maxValue = Math.max(...valueArr)let minValue = Math.min(...valueArr)const maxMoreThanZero = maxValue >= 0const minMoreThanZero = minValue >= 0let totalDiff = maxValue - minValuelet totalDiffScale = getNumberMaxScale(totalDiff / splitNum)let splitScale = totalDiffScale - splitSmallerScaleif (splitMinScale != null && splitScale < splitMinScale) {splitScale = splitMinScale}splitScale = splitScale == 0 ? -1 : splitScalelet minResult = numberFix(minValue, splitScale, false)let splitValue = (maxValue - minResult) / splitNumlet splitResult = numberFix(splitValue, splitScale, true)// 如果所有数据值都一样的特殊情况处理if (splitResult == 0) {// 如果所有数据都一样且都为0,则最小值为0minResult = minResult == 0 ? 0 : minResult - 1splitResult = 1}let maxResult = minResult + splitResult * splitNumreturn {min: Math.round(minResult * 100000000) / 100000000,max: Math.round(maxResult * 100000000) / 100000000,interval: Math.round(splitResult * 100000000) / 100000000}}export default echartsSplit

使用

import echartsSplit from '@/utils/echartsSplit'setOptions(list) {const wData = []const qData = []const drpData = []series.forEach((item) => {if (item.name.indexOf('流量') > -1) {qData.push(...item.data.filter((value) => value))} else if (item.name.indexOf('水位') > -1) {wData.push(...item.data.filter((value) => value))} else {drpData.push(...item.data.filter((value) => value))}})this.options.yAxis = yAxis.map((item, index) => {const data = index === 0 ? drpData : index === 1 ? wData : qDataconst obj = echartsSplit(data, 5, false)return {...item,min: obj.min,max: obj.max,interval: obj.interval}})this.options = { ...this.options }
}

效果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 衡石科技产品手册-指标分析
  • OpenCV绘图函数(14)图像上绘制文字的函数putText()的使用
  • 赞奇科技与华为云共襄828 B2B企业节,激活数字内容“云”创作
  • 理解并优化页面启动时的周期性数据发送代码
  • Java算法之堆排序(Heap Sort)
  • 跨部门协作:搭建共享型客服知识库
  • python网络爬虫(二)——数据的清洗与组织
  • 浅谈JAVA中的SPI机制
  • 制作 Docker 镜像
  • 有关树形结构数据的功能函数
  • Uniapp 调用aar、jar包
  • 什么是Jmeter ?Jmeter使用的原理步骤是什么?
  • Cobalt Strike 4.8 用户指南-第五节-获取初始访问
  • [数据集][目标检测]玻璃瓶塑料瓶检测数据集VOC+YOLO格式8943张2类别
  • 猫咪浮毛清理措施?希喂、安德迈、有哈宠物空气净化器数据大揭秘
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular数据绑定机制
  • CSS盒模型深入
  • JavaScript新鲜事·第5期
  • Joomla 2.x, 3.x useful code cheatsheet
  • js操作时间(持续更新)
  • LeetCode18.四数之和 JavaScript
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue 重置组件到初始状态
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 前端js -- this指向总结。
  • 如何学习JavaEE,项目又该如何做?
  • 协程
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 阿里云ACE认证学习知识点梳理
  • #APPINVENTOR学习记录
  • #java学习笔记(面向对象)----(未完结)
  • #php的pecl工具#
  • #window11设置系统变量#
  • (3)(3.5) 遥测无线电区域条例
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)JAVA使用POI操作excel
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (简单) HDU 2612 Find a way,BFS。
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一) storm的集群安装与配置
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • ***测试-HTTP方法
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat批处理(一):@echo off
  • .DFS.
  • .NET 8.0 中有哪些新的变化?
  • .net php 通信,flash与asp/php/asp.net通信的方法