echarts 动态字节单位轴,1024进制,B,KB,MB,GB附echarts示例

echarts 动态字节单位轴,1024进制,B,KB,MB,GB

KB单位图示

MB单位图示

跨单位图示

代码

javascript 复制代码
const propsSeries = [{
    name: "直接访问",
    type: "bar",
    barWidth: "60%",
    data: [11213,24324,5657,4434552,12134,8458,1222],
}]
const maxSplit  = 5
const gb = 1024 * 1024 * 1024;
const mb = 1024 * 1024;
const kb = 1024;
// 打印测试变量
let t = ''
const yByteAxisMax = () => {
    const data = propsSeries.map((s) => s.data.flat().filter((v) => v !== null && v !== undefined));
    const maxVal = Math.max(...data.flat());
    if (!maxVal) return undefined;
    const unitLevel = maxVal / gb > 1 ? gb : maxVal / mb > 1 ? mb : maxVal / kb > 1 ? kb : 1;
    let ceilMax = Math.ceil(maxVal / unitLevel)
    const ceilMaxChar = ceilMax.toString()
    const firstChar = ceilMaxChar.charAt(0)
    // 如57,纵轴最大100;47,纵轴最大50
    if (+firstChar >= 5) {
      ceilMax = Math.pow(10, ceilMaxChar.length)
    } else if (+firstChar >= 2) {
      ceilMax = Math.pow(10, ceilMaxChar.length) / 2
    } else {
    		ceilMax = kb;
    }
    return ceilMax * Number(unitLevel);
};
const maxY = yByteAxisMax()
const yByteAxisInterval = () => {
    if (!maxY) return undefined;
    const interval = maxY / gb > 1 ? gb : maxY / mb > 1 ? mb : maxY / kb > 1 ? kb : 1;
    // 根据maxSplit动设置间隔,如900k不超过1024k不会进位,导致interval为1k会有900个间隔,纵轴看不清
    let scale = 1
    if (maxY / maxSplit > interval) {
      scale = Math.ceil(maxY / maxSplit / interval)
    }
    return interval * scale;
};
const intervalY = yByteAxisInterval()
const formatYUnit = (value) => {
  const gb = 1024 * 1024 * 1024;
  const mb = 1024 * 1024;
  const kb = 1024;

  if (value / gb >= 1) {
    return `${value / gb}Gb`;
  } else if (value / mb >= 1) {
    return `${value / mb}Mb`;
  } else if (value / kb >= 1) {
    return `${value / kb}Kb`;
  } else {
    return `${value}B`;
  }
};
option = {
  title: {
    text: t
  },
  color: ["#3398DB"],
  tooltip: {
    trigger: "axis",
    axisPointer: {
      type: "shadow"
    }
  },
  grid: {},
  xAxis: [{
    type: "category",
    data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
  }],
  yAxis: [{
    type: "value",
    axisLabel: {
      formatter: formatYUnit
    },
    min: 0,
    max: maxY,
    interval: intervalY,
  }],
  series:propsSeries
}

代码是vue的computed写法改的所以有些奇怪,如果你要更好的优化可以提出来一块讨论,可以直接粘贴到echarts柱图示例中查看效果

相关推荐
paopaokaka_luck19 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
腾讯数据架构师2 天前
任务跑完怎么直接出图表?CubeStudio 任务可视化 ECharts 数据格式实操(CSV/JSON + metric.json,11 种图表一键渲染)
前端·json·echarts·数据可视化
总要学点什么2 天前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
paopaokaka_luck3 天前
社区服务平台(加权协同过滤推荐、Jieba中文词频分析、WebSocket实时聊天、求助处理闭环、 活动积分闭环、ECharts多维分析)
java·前端·spring boot·mysql·echarts·mybatis
mmsx3 天前
Android 并发考古:newThread 与 RxJava 共存,以及 GlobalScope 的三宗罪
android·echarts·rxjava
DataGear4 天前
DataGear 6.1.1 发布,数据可视化分析平台
javascript·信息可视化·数据分析·echarts·数据可视化
paopaokaka_luck4 天前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
半生过往5 天前
智慧园区数字孪生大屏总结
echarts·three.js
Highcharts.js6 天前
2026年,AI正在重写技术:“工具思维”正在失效?
人工智能·echarts·客户端·highcharts·可视化图表·企业级图表
paopaokaka_luck6 天前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节