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_luck3 天前
小学非遗科普平台(AI 非遗科普问答,ECharts学情数据、非遗资源分类与审核,资源收藏下载与学习记录,学习任务发布和作品评分,活动报名签到与统计)
java·人工智能·spring·信息可视化·数据分析·echarts
sibylyue10 天前
【报表和BI大屏】ECharts数据可视化大屏 / 驾驶舱
前端·信息可视化·echarts
YWL11 天前
OpenLayers+ECharts联动:地图点击联动图表,数据可视化大屏方案
前端·信息可视化·vue·echarts·openlayers
北城笑笑11 天前
Vue 104 ,AI + ECharts + Word:大模型数据可视化报告生成实战(前端导出图文并茂 Word 文档)
前端·vue.js·word·echarts
paopaokaka_luck12 天前
非遗文物数字化系统(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
前端·javascript·vue.js·人工智能·数据分析·echarts
小小尚@16 天前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts
paopaokaka_luck16 天前
基于springboot3+vue3的精准扶贫管理系统(AI 问答、ECharts 图形化分析)
前端·人工智能·echarts
Dreams°12317 天前
【React+TS+ECharts可视化避坑:图表空白、不实时更新、数据池堆积卡顿完整复盘(附完整源码)】
前端·react.js·echarts
二进制漫游记17 天前
ECharts 从入门到实战|前端数据可视化完整教程
前端·信息可视化·echarts