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_luck5 天前
高校社团管理(AI辅助任务分配、协同过滤算法推荐、ECharts数据可视化、活动参与闭环、校园交流与反馈、器材借还管理)
java·前端·javascript·spring boot·数据分析·echarts
paopaokaka_luck7 天前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
樱花落木兰11 天前
SpringBoot + ECharts 后台数据统计报表模块实战
java·javascript·spring boot·ai·log4j·github·echarts
小小尚@11 天前
WebGIS 开发利器|MapLand 在线行政区划 GeoJSON 边界预览下载平台
echarts·地图·geojson·webgis
千里码aicood12 天前
基于ECharts的电商平台用户行为数据分析
信息可视化·数据分析·echarts
paopaokaka_luck12 天前
个人综合管理小程序(echarts数据看板、健康数据记录与趋势查看、目标拆解和进度管理、日程待办与番茄钟、习惯打卡、收支统计、个人生活记录、跨模块智能提醒)
前端·javascript·spring·小程序·数据分析·echarts·生活
paopaokaka_luck19 天前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
paopaokaka_luck19 天前
考研政治刷题小程序(AI推荐题目、ECharts数据分析、章节练习与专项训练、模拟考试、错题本与收藏夹、学习打卡与目标管理、题库和组卷维护)
前端·javascript·spring boot·spring·数据分析·echarts
paopaokaka_luck23 天前
小学非遗科普平台(AI 非遗科普问答,ECharts学情数据、非遗资源分类与审核,资源收藏下载与学习记录,学习任务发布和作品评分,活动报名签到与统计)
java·人工智能·spring·信息可视化·数据分析·echarts