echarts实现走势图的标线分隔区域底色不同

实现效果

image.png

实现的重点

如何将折线图的填充区域按某个值去切割开,当前官网上的示例能做到填充区域有两个以上颜色分隔的基本是有两个及以上数据线。如:

image.png

当然你可以再额外再加一条同值数据线去假装是标线,如[200,200,200,200...],但是遇到走势凹进去的数据线,标线横跨凸起和凹进去的区域就不能用这种方式实现了。
于是我在实践中发现可以利用标线markLine+过渡areaStyle的方式去实现这种效果。

实现流程

  1. 首先我们从echarts官网上示例找个相似的图,就下面这个吧


    image.png
option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [150, 230, 224, 218, 135, 147, 260],
        type: 'line'
    }]
};

2.第二步要做一条标线,查找官网配置项手册,可知标线可以添加如下属性


image.png
var data =[150, 230, 224, 218, 135, 147, 260]
var warnLine = '200'

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: data,
        type: 'line',
        // 标记线
         markLine : {
            symbol:"none",               
            label:{
                position:"middle",         
                formatter: "标记线"
            },
            data : [{
                silent:false,             
                lineStyle:{              
                    type:"solid",
                    color:"red"
                },
                yAxis: warnLine     //警戒线在y轴上的坐标
            }]
        }
    }]
};
  1. 给折现图添加个底色 areaStyle,查看官网手册可知除了可以配置纯色透明色,还可以配置渐变色和纹理色。我们本次就用到了渐变色。
    我们选择线性渐变的形式。
    3.1 采用渐变会有如下效果
    image.png
// 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,
// 相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,
// 则该四个值是绝对的像素位置
color: {
    type: 'linear',
    x: 0,
    y: 0,
    x2: 0,
    y2: 1,
    colorStops: [{
        offset: 0, color: 'red' // 0% 处的颜色
    }, {
        offset: 1, color: 'blue' // 100% 处的颜色
    }],
    global: false // 缺省为 false
}

3.2 利用通过offset来设置颜色过渡范围的方式,我们可以联系css的过渡色设置,
你是否曾经这样用过css的过渡背景色
background: linear-gradient(red 10%,red 30%, green 30%,green 90%, blue 90%,blue 100%);

然后发现只要在一个区间的极限处设置两个色值则可以明显分隔两个颜色!!!!

image.png
               colorStops: [{
                    offset: 0, color: 'red' // 0% 处的颜色
                }, {
                    offset: 0.5, color: 'red' // 50% 处的颜色
                }, {
                    offset: 0.5, color: 'blue' // 50% 处的颜色
                }, {
                    offset: 1, color: 'blue' // 100% 处的颜色
                }],
  1. 然后就是特别简单的计算问题了

计算出警戒值(标线的y值)在这个区域内的占比,
var warnProp = warnLine/ Math.max.apply(null,data)
ps:官方示例里的渐变起点是从数据最大值开始的,是从上往下渐变的,而我们要的渐变方向应该是从y=0向上渐变的。因此我们要调整一下方向和颜色

         color: {
                type: 'linear',
                x: 0,
                y: 1, //此处设置为1,表示从y=0处作为渐变起点
                x2: 0,
                y2: 0,
                colorStops: [{
                    offset: 0, color: 'blue' // 0% 处的颜色
                }, {
                    offset: warnProp, color: 'blue' // 标线处的颜色
                }, {
                    offset: warnProp, color: 'red' // 标线处的颜色
                }, {
                    offset: 1, color: 'red' // 100% 处的颜色
                }],
                global: false // 缺省为 false
            }

效果如下:


image.png

5.基本完成,但是还差一点点,在标线上下的数据折线我们希望也能跟区域填充色保持一致,则可以添加如下配置:


image.png
visualMap: {
        show: false,
        pieces: [{
            gt: 0,
            lte: warnLine,
            color: 'blue'
        }, {
            gt: warnLine,
            lte: 500,
            color: 'red'
        }],
        outOfRange: {
            color: 'red'
        }
    },

6.完整配置如下:

var data =[150, 230, 224, 218, 135, 147, 260]
var warnLine = '210'
var maxVal = Math.max.apply(null,data) 
var warnProp = warnLine/ maxVal 

option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
     visualMap: {
        show: false,
        pieces: [{
            gt: 0,
            lte: warnLine,
            color: 'blue'
        }, {
            gt: warnLine,
            lte: maxVal,
            color: 'red'
        }],
        outOfRange: {
            color: 'red'
        }
    },
    series: [{
        data: data,
        type: 'line',
        markLine : {
            symbol:"none",               
            label:{
                position:"middle",         
                formatter: "警戒线",
                color:'red'
            },
            data : [{
                silent:false,             
                lineStyle:{              
                    type:"solid",
                    color:"red"
                },
                yAxis: warnLine     //警戒线在y轴上的坐标
            }]
        },
        areaStyle:{
           color: {
                type: 'linear',
                x: 0,
                y: 1, //此处设置为1,表示从y=0处作为渐变起点
                x2: 0,
                y2: 0,
                colorStops: [{
                    offset: 0, color: 'blue' // 0% 处的颜色
                }, {
                    offset: warnProp, color: 'blue' // 标线处的颜色
                }, {
                    offset: warnProp, color: 'red' // 标线处的颜色
                }, {
                    offset: 1, color: 'red' // 100% 处的颜色
                }],
                global: false // 缺省为 false
            }
        }
    }]
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容