2025年echarts双y轴刻度对齐的问题

echarts双y轴刻度对齐的问题问题 echarts 双 y 轴的刻度线经常因为数据范围的问题 导致左右 y 轴的刻度线不能对齐 影响美观 直接上代码 1 js 方法 param arrLeft 左 y 轴的数据 param arrRight 右 y 轴的数据 param splitNumber 刻度数 returns max 左 y 轴最大值 min

大家好,我是讯享网,很高兴认识大家。

 问题:echarts双y轴的刻度线经常因为数据范围的问题,导致左右y轴的刻度线不能对齐,影响美观,直接上代码

1. js方法

/  * @param arrLeft:左y轴的数据  * @param arrRight:右y轴的数据  * @param splitNumber:刻度数  * @returns [{max:左y轴最大值,min:左y轴最小值,interval:左y轴刻度间隔},  *             {max:右y轴最大值,min:右y轴最小值,interval:右y轴刻度间隔}]  */ function getInterval(arrLeft,arrRight,splitNumber){     var leftYScale=getIntervalNum(arrLeft,splitNumber);     var rightYScale=getIntervalNum(arrRight,splitNumber);     var leftYNum=leftYScale.intervalNum     var rightYNum=rightYScale.intervalNum     //当左右两边的刻度数不一致是,开始做校正     if(leftYNum!=rightYNum){         if(leftYNum>rightYNum){             var diffVal=leftYNum-rightYNum;             return [leftYScale,addMaxAndMin(diffVal,rightYScale)]         }else{             var diffVal=rightYNum-leftYNum;             return [addMaxAndMin(diffVal,leftYScale),rightYScale]         }     }else{         return [leftYScale,rightYScale];     }      } function getIntervalByY3(arrLeft0,arrLeft1,arrRight,splitNumber){     return getInterval(arrLeft0.concat(arrLeft1),arrRight,splitNumber) } /  * echarts中求刻度间隔的方法  * @param t  * @param e  * @returns  */ function Vo(t, e) {     var i, n = Bo(t), o = Math.pow(10, n), a = t / o;     return i = e ? a < 1.5 ? 1 : a < 2.5 ? 2 : a < 4 ? 3 : a < 7 ? 5 : 10 : a < 1 ? 1 : a < 2 ? 2 : a < 3 ? 3 : a < 5 ? 5 : 10,     t = i * o,     n >= -20 ? +t.toFixed(n < 0 ? -n : 0) : t } function Bo(t) {     return Math.floor(Math.log(t) / Math.LN10) } function Ao(t, e, i) {         return null == e && (e = 10),         e = Math.min(Math.max(0, e), 20),         t = (+t).toFixed(e),         i ? t : +t } /  * @param arr y轴的数据  * @returns 未校正的y轴{max:y轴最大值,min:y轴最小值,interval:y轴刻度间隔,intervalNum:刻度数}  */ function getIntervalNum(arr,splitNumber){     arr=arrToNull(arr);     var max = Math.max(...arr);//这中方法数组里面有undiffe会出错     var min = Math.min(...arr);     if(min>0)min=0;     if(max<0)max=0;     if(splitNumber){         var o=Vo((max-min) / splitNumber, 0);//刻度间隔     }else{         var o=Vo((max-min) / 5, !0);//刻度间隔     }     max=Ao(Math.ceil(max / o) * o);     min=Ao(Math.floor(min / o) * o);     var yScale={};     yScale.max=max;     yScale.min=min;     yScale.interval=o;     yScale.intervalNum=(max-min)/o;     return yScale; } /  * 增加最大刻度和最下刻度  * @param num 要增加的数  * @param yScale y轴对象  * @returns  */ function addMaxAndMin(num,yScale){     for(var i=0;i<num;i++){         if(!(i%2)){//是2的倍数时             yScale.max+=yScale.interval;         }else{//不是2的倍数时             if(yScale.min==0){                 yScale.max+=yScale.interval;             }else{                 yScale.min-=yScale.interval;             }         }     }     return yScale; } /  * 数组中的undefined转为null  * @param arr  * @returns  */ function arrToNull(arr){     for(var i=0;i<arr.length;i++){         if(arr[i]===undefined){             arr[i]=null;         }     }     return arr; }

讯享网

 2.调用


讯享网

讯享网var yScales=getInterval(barData,lineData,4); var leftYScale=yScales[0]; var rightYScale=yScales[1]; //左y轴设置属性 max:leftYScale.max, min:leftYScale.min, interval:leftYScale.interval //右y轴设置属性 max:rightYScale.max, min:rightYScale.min, interval:rightYScale.interval

3.效果

 

小讯
上一篇 2025-02-20 16:44
下一篇 2025-02-15 09:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/56022.html