设置echarts双y轴线对齐以及0刻度线对齐

该博客介绍了如何解决Echarts图表中0刻度线未对齐和左右Y轴刻度线不对齐的问题。通过获取所有Y轴的最大值和最小值,然后调整interval以确保刻度线均匀分布和0刻度线对齐。提供了详细的代码示例,包括处理不同情况的逻辑,例如顶部、底部和两者皆有的刻度线。完整代码链接可在文中找到,帮助开发者实现美观的图表展示。
摘要由CSDN通过智能技术生成

问题

echarts开发常有0刻度线没有对齐,左右y轴刻度线没有对齐
在这里插入图片描述

解决方案

有几个y轴坐标就找出最大值和最小值,保证interval均分以及0刻度线对齐即可

/**
 * @description 格式化输出最大值最小值
 * @param { array } arr series的data数据,有几个y轴传几个
 * @result 返回的是包含最大最小和interval数组,直接放到各y轴yAxis中
 */
function formateMaxMin(arr) {
  const list = [];
  if (arr && arr.length > 0) {
    let itemType = '';
    arr.forEach((itemArr, index) => {
      let max = 0;
      let min = 0;
      if (itemArr && itemArr.length > 0) {
        itemArr.forEach(each => {
          max = each > max ? each : max;
          min = each < min ? each : min;
        });
      }
      const type = min < 0 ? (max === 0 ? 'bottom' : 'all') : (max === 0 ? '' : 'top');
      itemType = itemType ? (type ? (type !== itemType ? 'all' : itemType) : itemType) : type;
      list.push(type ? {
        max, min, type
      } : {});
    });

    if (itemType === 'top') {
      list.forEach(item => {
        if (item.type) {
          item.interval = item.max / 8;
          delete item.type;
        } else {
          item.max = 100;
          item.interval = 100 / 8;
          item.min = 0;
        }
      });
    } else if (itemType === 'bottom') {
      list.forEach(item => {
        if (item.type) {
          item.interval = Math.abs(item.min) / 8;
          delete item.type;
        } else {
          item.max = 0;
          item.interval = 100 / 8;
          item.min = -100;
        }
      });
    } else if (itemType === 'all') {
      list.forEach(item => {
        const { type, max, min } = item;
        const absMin = Math.abs(min);
        if (type === 'top') {
          item.interval = max / 4;
          item.min = -max;
        } else if (type === 'bottom') {
          item.interval = absMin / 4;
          item.max = absMin;
        } else if (type === 'all') {
          if (max > absMin) {
            item.interval = max / 4;
            item.min = -max;
          } else {
            item.interval = absMin / 4;
            item.max = -min;
          }
        } else {
          item.max = 100;
          item.interval = 100 / 4;
          item.min = -100;
        }
        delete item.type;
      });
    }
    console.log(itemType, list, list);
  }

  return list;
}

仍有问题

我没做数据规整,所以展示不好看,不懂来问我

结果

在这里插入图片描述

完整的代码

https://download.csdn.net/download/wzp20092009/86270082

完整好看的效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值