概述

今天 PM 说,需要把 echarts 图表的纵坐标调成这样:如果全是 4 位数就用 K 为单位。冷静分析,就是说如果纵坐标刻度的间距是四位数,就用 K 为单位。那要如何获取纵坐标刻度的间距呢?我们都知道,Echarts 纵坐标刻度的间距是它自己生成的,而且会变。于是我去看 Echarts 源码碰碰运气,竟然让我发现了 Echarts 的纵坐标刻度的间距的生成方法!!!记录下来,供以后开发时参考,相信对其他人也有用。

参考资料:

Echarts源码1

Echarts源码2

源码

简单来说,它是用如下方法生成的:

  1. // this.data 是数据
  2. const round = true;
  3. const splitNumber = 4;
  4. const max = this.data.reduce((x,y) => x > y ? x : y);
  5. let val = max / splitNumber;
  6. // echart 内部计算 interval 的方法
  7. // https://github.com/apache/incubator-echarts/blob/fd064123626c97b36cbd6da1b5fc73385c280abd/src/util/number.js
  8. const exponent = Math.floor(Math.log(val) / Math.LN10);
  9. const exp10 = Math.pow(10, exponent);
  10. const f = val / exp10; // 1 <= f < 10
  11. let nf;
  12. if (round) {
  13. if (f < 1.5) { nf = 1; }
  14. else if (f < 2.5) { nf = 2; }
  15. else if (f < 4) { nf = 3; }
  16. else if (f < 7) { nf = 5; }
  17. else { nf = 10; }
  18. }
  19. else {
  20. if (f < 1) { nf = 1; }
  21. else if (f < 2) { nf = 2; }
  22. else if (f < 3) { nf = 3; }
  23. else if (f < 5) { nf = 5; }
  24. else { nf = 10; }
  25. }
  26. val = nf * exp10;
  27. // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).
  28. // 20 is the uppper bound of toFixed.
  29. return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;

可以看到:

  1. 间距只和数据的最大值还有 splitNumber 有关,与其它值都没有关系。
  2. Echarts 使用 log10 来获取最优的间距。具体算法原理不知道。
  3. Math.log(val) / Math.LN10 是 lgx(以10为对数);Math.log(val) / Math.LN2 是 lgx(以2为对数)

Echarts 里面获取纵坐标刻度的间距的更多相关文章

  1. 坐标轴刻度取值算法-基于魔数数组-源于echarts的y轴刻度计算需求

    本文链接:https://blog.csdn.net/qq_26909801/article/details/96966372数值型坐标轴刻度计算算法前言算法描述上代码代码运行效果结语前言因实习的公司 ...

  2. ECharts动态获取后台传过来的json数据进行多个折线图的显示,折线的数据由后台传过来

    ECharts 多个折线图动态获取json数据 效果图如下: 一.html部分 <p id="TwoLineChart" style="width:100%; he ...

  3. matlab 设置横纵坐标刻度的字体!!

    set(gca,'FontSize',16) %%设置横纵坐标字体的大小

  4. echarts 修改y轴刻度间隔问题

    其中min.max可以自定义可以动态获取数据 yAxis : [ {                        type : 'value',                        axi ...

  5. echarts 实时获取数据

    html: <div id="realTimeInvoke" class="chart" style="height: 400px;" ...

  6. Django+Xadmin+Echarts动态获取数据legend颜色显示灰色问题已解决

    前段时间做的使用Django的Xadmin后台和百度Echarts进行后台数据可视化,功能虽然实现,展示出来的legend图例,都是灰色的,只有鼠标放上去才会显示彩色的.百度都快被我刨穿了,看到有类似 ...

  7. echarts Y轴的刻度 跟数据对应---tooltip-formatter

    var xAxisData = ['2018-01', '2018-02', '2018-03', '2018-04', '2018-05', '2018-06', '2018-07', '2018- ...

  8. 关于Echarts的原生js获取DOM元素与动态加载DOM元素的冲突问题

    1.前言: 最近在做的看板项目,因为需要循环加载后台数据,并且用Echarts做数据呈现,所以jQuery和angular等库统统靠边站,Echarts用的是原生js获取DOM元素,至于诸多不兼容等深 ...

  9. Jquery + echarts 使用

    常规用法,就不细说了,按照官网一步步来. 本文主要解决问题(已参考网上其他文章): 1.把echarts给扩展到JQuery上,做到更方便调用. 2.多图共存 3.常见的X轴格式化,钻取时传业务实体I ...

随机推荐

  1. lightinthebox头部分类菜单下拉导航,使鼠标移到See All Categories就显示下拉菜单

    lightinthebox头部分类菜单下拉导航,使鼠标移到See All Categories就显示下拉菜单 打开includes\templates\lightinthebox\common\tpl ...

  2. 数字转化为汉字,如5->五

    //数字转化为汉字 如5-->五-(NSString*)translation:(NSString *)arebic{   NSString *str = arebic;    NSArray ...

  3. 高性能mysql 第1章 mysql架构与历史

    mysql逻辑架构图: 第一层 客户端 第二层(服务层):针对所有类型的存储引擎可以公共提取的部分.将存储引擎抽离之后的其他部分都在这里.如:查询解析,分析优化,内置函数,存储过程,触发器,视图. 第 ...

  4. phpMyAdmin无法缓存模板文件,所以会运行缓慢。

    出现这个的原因是 phpmyadmin的安装目录, tmp目录不存在,或者存在但是权限不对.这是个缓存目录,可以加快phpmyadmin的运行,即使不理睬这个警告信息,也不会影响程序的执行. 解决的方 ...

  5. 野生小白纯js仿思否简易移动端

    初衷 感谢思否两个多月来的陪伴做这个东西还是多自己两个月多来的学习总结吧,顺带练手.希望能找到一个还可以的工作吧! 为什么没用框架 react过了一边官方文档,对状态提升和组件有点了解一下,懂得还是太 ...

  6. linux负载均衡杂谈

    假如架构中的主机拥有全量数据集,即使其中一台挂了,也不会导致离线,高可用(负载均衡集群) 假如架构中的各主机只拥有sharing,那我们谓之 分布式集群 硬件ctrix F5-BIG-IP(一台动辄2 ...

  7. Acwing-280-陪审团(背包dp?)

    链接: https://www.acwing.com/problem/content/282/ 题意: 在一个遥远的国家,一名嫌疑犯是否有罪需要由陪审团来决定. 陪审团是由法官从公民中挑选的. 法官先 ...

  8. yum安装nginx,配置资源访问出现403Forbidden问题

    使用yum安装nginx后除了nginx自带页面其他配置页面都是403forbidden问题. 暂时的解决办法是,修该nginx配置文件中的user为root , 然后关闭seliunx或者添加ngi ...

  9. wx小程序知识点(三)

    三.封装小程序的数据请求 (1)在根目录创建utils目录,创建config.js.base.js (2)在config.js中创建config类,并将请求路径配置给config的属性restUrl, ...

  10. jQuery_替换操作

    代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...