原文地址

今天突然有个我们的咨询公司找我问一个echarts问题,这个问题确实值得一解决,很有意思。

问题是这样的。数据中有很多低于100的数值,但是最高值却能达到14000。

data = [93.65, 101.08, 97.15, 171.58, 115.23, 127.55, 117, 115.46, 114.27, 106.68, 116.66, 110.77, 111.88, 114.08, 130.46, 129.04, 126.71, 116.46, 121.66, 119.56, 146.02, 741.23, 3436.16, 14700, 19,336, 8647.53, 4815.84, 4541.84, 4587.21, 5272.62]
他用常规的echarts实现效果如下:

他主要两个诉求:一是不均匀的划分Y轴,二是tooltip显示原值。

这个问题网上貌似没有一个成型的解决方案,所以我记录一下,方便他人。最终我实现的效果如下:

代码如下:

一、修改纵坐标的数值

yAxis: {
            type: 'value',
            axisLine:{
                show:false
                },
            axisTick:{
                show:false
                },
            min:0,
            max:21000,
            splitNumber:8,
            axisLabel:{
            formatter:function(v){
                let item = ''
                if(v===0){
                    item='0'
                }else if(v==3000){
                    item = '1'
                }else if(v==6000){
                    item = '100'
                }else if(v==9000){
                    item = '300'
                }else if(v==12000){
                    item = '500'
                }else if(v==15000){
                    item = '1000'
                }else if(v==18000){
                    item = '10000'
                }else if(v==21000){
                    item = '20000'
                }else if(v==24000){
                    item = '30000'
                }
                return item
                }
            }
    },

二、处理原数据,采用的方法是把以前100以内的数据模拟到6000以内,就是同比例放大。

let wxdata = [93.65, 101.08, 97.15, 171.58, 115.23, 127.55, 117, 115.46, 114.27, 106.68, 116.66, 110.77, 111.88, 114.08, 130.46, 129.04, 126.71, 116.46, 121.66, 119.56, 146.02, 741.23, 3436.16, 14700, 19,336, 8647.53, 4815.84, 4541.84, 4587.21, 5272.62]
      
function formatData(arr){
    let newHashArray = []
    for(var i=0;i<arr.length;i++){
        let obj={}
        let temp = arr[i]
        if(arr[i]>0&&arr[i]<1){
            arr[i]=arr[i]*3000    
        }else if(arr[i]>1&&arr[i]<100){
            arr[i]=3000+arr[i]*(3000/99)
        }else if(arr[i]>100&&arr[i]<300){
            arr[i]=6000+arr[i]*(3000/200)
        }else if(arr[i]>300&&arr[i]<500){
            arr[i]=9000+arr[i]*(3000/200)
        }else if(arr[i]>500&&arr[i]<1000){
            arr[i]=12000+arr[i]*(3000/500)
        }else if(arr[i]>1000&&arr[i]<10000){
            arr[i]=15000+arr[i]*(3000/9000)
        }
        obj.value = arr[i]
        obj.formatV = temp
        newHashArray.push(obj)
          }
          return newHashArray;
      }
let wxArray = formatData(wxdata)
//二、在series中直接设置data,data会直接取value值 {
    name: '微信小程序浏览量',
    type: 'line',
    areaStyle: {},
    lineStyle:{
        color:['rgb(7,193,96)'],
    },
    data:wxArray
},
//三、修改tooltip的值 tooltip: {
            trigger: 'axis',
            formatter(param){
                                
                return `微信访问:${param[7].data.formatV}`
                }
        },

这个折线就是模拟,精度肯定是不那么准确,但是看趋势还是不错的,而且tooltip的值也是准确的。还不错。

Echarts实现不均匀刻度的方法,自定义刻度(转)的更多相关文章

  1. ECharts图表中级入门之formatter:夜谈关于ECharts图表内的数据格式化方法

    来源于:http://www.ithao123.cn/content-3751220.html 格式化之所以存在,主要是因为我们想把一些不够人性化的内容通过某种处理让其变得人性化,便于用户更好地理解内 ...

  2. C#Winform使用扩展方法自定义富文本框(RichTextBox)字体颜色

    在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示 和错误等类别.为了更好地区分不同类型的日志,我们需要使 ...

  3. [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法

    不好的实践 函数或方法的接收者(即绑定到特殊关键字this的值)是由调用者的语法决定的.方法调用语法将方法被查找的对象绑定到this变量,(可参阅之前文章<理解函数调用.方法调用及构造函数调用之 ...

  4. plot sin示意图(隐藏刻度,自定义刻度)

    plot sin示意图(隐藏刻度,自定义刻度) 隐藏坐标轴刻度 自定义坐标轴刻度 Code #!/usr/bin/env python # -*- coding: utf-8 -*- import n ...

  5. AntD框架的upload组件上传图片时使用customRequest方法自定义上传行为

    本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 我在上一篇文章<AntD框架的upload组件上传图片时使用customRequest方法 ...

  6. 初次体验百度eCharts遇到的问题和解决方法

    前言 上周在厌烦Highchart下,体验了下百度的eCharts,支持IE6.7.8+外,对数据在线编辑还有工具栏支持,体验时遇到了几个小问题,最近两天在尝试得到了一个解决方法. Tooltip时单 ...

  7. 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”

    接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...

  8. Echarts 数据视图 生成Excel的方法

    一.生成Excel,两大方向:1后台生成Excel 查询数据库,使用NOPI生成Excel.2前台js生成Excel三种方式1)jquery.table2excel.js --采用,优势:兼容IE和C ...

  9. python魔法方法-自定义序列

    自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等). 如果要实现这个功能,就要遵循 python ...

  10. 在Echarts 柱形图的单击事件中写入自定义的参数

    标签: 逻辑:(点击柱形图的某个实例(注意:三个柱子表示的是一个实例)) 参考链接:http://echarts.baidu.com/doc/example/event.html { name: ‘c ...

随机推荐

  1. C++分别用顺序栈和链栈实现数制的转换相关代码

    //案例分析:将一个十进制数N转化为八进制数,在计算过程中,使得N模8得到八进制数的各个数依次进栈,//然后将八进制数依次输出,得到八进制数.#include<iostream>#incl ...

  2. go对数组对象排序

    1.根据时间对数组对象排序 package main import (     "fmt"     "time"     "github.com/ah ...

  3. linux查看java堆栈信息_linux进程堆栈大小

    1.查看JAVA进程JVM参数 jinfo -flags pid(进程号) -XX:CICompilerCount=2 最大的并行编译数 -XX:InitialHeapSize=16777216 JV ...

  4. shell脚本自动过滤尝试多次连接ip并添加到系统黑名单

    #!/bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c | awk '{{ print $2 " ...

  5. 解决gpg: 从公钥服务器接收失败:服务器故障

    xxx@xxx-virtual-machine:~/workspace/rv1126_rv1109_sdk$ sudo apt-key adv --keyserver hkp://keyserver. ...

  6. element table 表格嵌套

    ///////////////////////////  代码如下 <template> <div class="report-forms-page"> & ...

  7. 遍历operation

    std::ostringstream out; double f8Value; NXOpen::CAM::CAMSetup *camSetup = displayPart->CAMSetup() ...

  8. 分布式计算 Distributed computing

    分布式计算(Distributed computing),又译为分散式运算,是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处 ...

  9. AndroidQ 打通应用层到HAL层(转)

    1. 参考https://blog.csdn.net/qq_34211365/category_9903135.html 直通式,绑定式,从应用端调到hal接口,亲自实现能够更加理解

  10. SpringCloud基本认知

    SpringCloud基本认知 ​ 本文学习自<重新定义SpringCloud> 微服务架构概述 应用架构的发展 应用是可独立运行的程序代码,提供的相对应完善的业务功能. 目前软件架构有三 ...