echarts双折线图标注的文字位置自动上下排序

说明

有时候项目组要求做的一些折线图比较奇葩一点,比如本年每个月的数据和去年的数据进行比较,而且标注的文字要根据数据的大小变化,大的值标注的文字在上面,小的值标注的文字要在下面,这个案例在官方或者论坛上都没有案例,后面经过自己的一些想法和研究,搞了一个案例出来了。废话不多说,直接上干货。

示例图

示例

HTML代码

<div id="main" style="width: 50%;height:400px;margin: 0 auto;"></div>

JS代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="https://lib.baomitu.com/echarts/5.1.2/echarts.common.js"></script>
<script>
        $(function () {
            var data={
                title:"xxx标题",
                color:["red","blue"],
                x:['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
                y:[{min:null,max:null,name:"(单位:亿元)"}],
                data:[
                    {
                        name:"本年累计",
                        data:["21","3","38","9","8.5","5","35","25","14","11","9","25"]
                    },
                    {
                        name:"去年累计",
                        data:["13","9.3","9","17","8.5","11.5","9.3","9","17","8.5","27.5","23.666"]
                    }
                ]
            };
            //前端细节区分
            var tip={
                tofiexd:2,//y轴刻度保留2位数小数
                unit:"%",//y轴刻度单位
            }
            drawLine("main","line_auto_up_down",data,tip);
            
        });
        
        /**
         * @func
         * @desc    折线函数
         * @param {string} id - string |目标id
         * @param {string} type - string | line_auto_up_down(双折线,并且排列标记字的位置
         * @param {object} data - 后端数据 @returns {...}
         * @param {object} tip - 前端重定义echar画图细节和区别 @returns {...}
         * 
         */
        function drawLine(id,type,data,tip){
            var myChart = echarts.init(document.getElementById(id));
            var option = {
                backgroundColor:"rgba(10,10,10,0.1)",
                title: {
                    text: "默认标题",
                    x: 'center',
                    top: '5'
                },
                tooltip: {
                    trigger:'axis',
                    confine: true,
                    axisPointer:{
                        type:"line"
                    }
                },
                legend:{
                    show:true,
                    bottom: 15,
                },
                xAxis: {
                    type: 'category',
                    data: ['周一','周二','周三','周四','周五','周六','周日']
                },
                yAxis: [
                    {
                        type: 'value',
                        show: true,
                        min: null,
                        max: null,
                        name:"(单位:xx)",
                        splitLine:{show:false}
                    },
                    {
                        type: 'value',
                        show: false,
                        min: null,
                        max: null,
                        name:"(单位:xx)",
                        splitLine:{show:false}
                    },
                ],
                grid: {
                    left: '4%',
                    right: '4%',
                    bottom: '15%',
                    top:"20%",
                    containLabel: true
                },
                series: []
            }
            //后端传数据源进行处理
            if(data.title){
                option.title.text = data.title;
            }
            if(data.color){
                var arrColor = data.color;
                option.color = arrColor;
            }
            if(data.x){
                option.xAxis.data = data.x;
            }
            //全局处理设置Y轴刻度单位(默认无单位),显示多少位小数(默认0位)
            var sunit = "",stofixed = 0;
            //前端控制设置
            if(tip){
                if(tip.tofiexd){
                    stofixed = tip.tofiexd
                }
                if(tip.unit){
                    sunit = tip.unit
                }
            }
            for(var mm=0;mm<data.y.length;mm++){
                if( data.y[mm].name){
                    option.yAxis[mm].name = data.y[mm].name;
                }
                if( data.y[mm].min){
                    option.yAxis[mm].min = data.y[mm].min;
                }
                if( data.y[mm].max){
                    option.yAxis[mm].max = data.y[mm].max;
                }
                option.yAxis[mm].axisLabel={
                    formatter: function(val){
                        if(stofixed == 0){
                            return val + sunit;
                        }else{
                            return val.toFixed(stofixed) + sunit;
                        }
                    }
                }
            }
            if(data.y.length > 1){
                //双Y轴处理
                option.yAxis[1].show = true;
            }
            //line_auto_up_down标注文字上下自动排序显示类型处理
            if(type=="line_auto_up_down"){
                var arrVal1=[],arrVal2=[];
                for(var i=0;i<data.data.length;i++){
                    var val=data.data[i];
                    var tmp={
                            name:val.name,
                            yAxisIndex:0,
                            type:"line",
                            data:[]
                    }
                    for(var j=0;j<val.data.length;j++){
                        var vval={
                            value:val.data[j],
                            label:{show:true},
                        };
                        tmp.data.push(vval)
                    }
                    option.series.push(tmp)
                }
                
                for(var j=0;j<data.data[0].data.length;j++){
                    arrVal1.push(data.data[0].data[j])
                    arrVal2.push(data.data[1].data[j])
                }
                //判断数组大小并进行上下自动显示
                if(arrVal1.length == arrVal2.length){
                    for(var j=0;j<arrVal1.length;j++){
                        var val0 = option.series[0].data[j].value;
                        var val1 = option.series[1].data[j].value;
                        if(Number(val0)>Number(val1) || Number(val0)==Number(val1)){
                            option.series[0].data[j].label.position="top";
                            option.series[1].data[j].label.position="bottom";
                        }else{
                            option.series[0].data[j].label.position="bottom";
                            option.series[1].data[j].label.position="top";
                        }
                    }
                }
            }
            // 画图
            myChart.setOption(option,true);
            myChart.resize();
        }
        </script>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容