当前位置: 首页 > news >正文

echarts 折线图动态基准线设置超出基准线标红

基准线属性:markLine

线条标红关键属性:visualMap

小于: lt (less than)

大于:gt (greater than)

小于等于:lte (Less than or equal to)

大于等于:gte (Greater than or equal to)

1、基础应用——2条基准线

当存在2条基准线时,折线图切割为3部分,小于最低基准线和大于最高标准线的部分标红,中间位置为蓝色。代码如下(可直接cv到echarts官网的调试页面):

option = {
  xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  yAxis: {
    type: 'value'
  },
  visualMap: {
    pieces: [
      {
        lte: 160,  // 小于等于160
        color: 'red' // 为红色
      },
      {
        gt: 160, // 大于160
        lte: 225, // 小于等于225
        color: '#5470c6' // 为蓝色
      },
      {
        gt: 225, // 大于225
        color: 'red' // 为红色
      }
    ],
    show: false, // 不显示色块的图例
  },
  series: [
    {
      data: [150, 230, 224, 218, 135, 147, 260],
      type: 'line',
      markLine: {
        symbol: 'none',
        data: [
          {
            yAxis: 160, // 最小值
            label: {
              show: true
            },
            lineStyle: {
              type: 'dashed',
              color: '#b17063'
            }
          },
          {
            yAxis: 225, // 最大值
            label: {
              show: true
            },
            lineStyle: {
              type: 'dashed',
              color: '#b17063'
            }
          }
        ]
      }
    }
  ]
};

2. 1条基准线,该线可能为最大值,可能为最小值

一条基准线时,需要注意visualMap.pieces里面的数据不可以相同,否则会报错。解决方案就是在gt或gte的数值后加上0.0001

1. 基准线为最小值时

当基准线为最低限时,需要做到小于基准线的部分标红,其余为蓝色

// ...
visualMap: {
    pieces: [
      {
        lte: 160, // 小于或等于160
        color: 'red' // 为红色
      },
      {
        gt: 160.0001, // 大于160
        color: '#5470c6' // 为蓝色
      }
    ],
    show: false
  },
series: [
    {
      data: [150, 230, 224, 218, 135, 147, 260],
      type: 'line',
      markLine: {
        symbol: 'none',
        data: [
          {
            yAxis: 160, // 最小值
            label: {
              show: true
            },
            lineStyle: {
              type: 'dashed',
              color: '#b17063'
            }
          }
        ]
      }
    }
  ]

2. 基准线为最大值时

当基准线为最大限时,需要做到小于基准线的部分为蓝色,超过基准的部分为红色

 // ...
 visualMap: {
    pieces: [
      {
        lte: 225, // 小于等于225
        color: '#5470c6' // 为蓝色
      },
      {
        gt: 225.0001, // 大于225
        color: 'red' // 为红色
      }
    ],
    show: false
  },
series: [
    {
      data: [150, 230, 224, 218, 135, 147, 260],
      type: 'line',
      markLine: {
        symbol: 'none',
        data: [
          {
            yAxis: 225, // 最大值
            label: {
              show: true
            },
            lineStyle: {
              type: 'dashed',
              color: '#b17063'
            }
          }
        ]
      }
    }
  ]

 3. 通用方法——当不确定有几条基准线时

已知后端返回的基准线的数据格式为数组lines:[data, data]lines第一项为最小值,第二项是最大值。lines[0]=null时则没有最小值,lines[1]=null时则没有最大值。

      // 图表超出上下限值的部分显示红色
      getVisualMapData(lines) {
        if(lines?.length) {
          if(lines[0] && lines[1]) {
            // 存在上下限值
            return [
              {
                lt: lines[0],// 小于最小值
                color: 'red',// 为红色
              },
              {
                gte: lines[0],// 大于或等于最小值
                lte: lines[1],// 小于或等于最大值
                color: '#5470c6', // 为蓝色
              },
              {
                gt: lines[1],// 大于最大值
                color: 'red',// 为红色
              },
            ];
          } else if(lines[0] && ! lines[1]) {
            // 只存在下限值
            return [
              {
                lt: lines[0],// 小于最小值
                color: 'red',// 为红色
              },
              {
                gte: lines[0] + 0.00001,// 大于或等于最小值
                color: '#5470c6',// 为蓝色
              },
            ];
          } else if(! lines[0] && lines[1]) {
            // 只存在上限值
            return [
              {
                gt: lines[1] + 0.00001,// 大于最大值
                color: 'red',// 为红色
              },
              {
                lte: lines[1],// 小于或等于最大值
                color: '#5470c6',// 为蓝色
              },
            ];
          } else {
            // 没有上下限值
            return null;
          }
        } else {
          return null;
        }
      },

使用该方法:

const visualMapData = this.getVisualMapData(lines);

// ...
option = {
  visualMap: visualMapData ? {
              pieces: visualMapData,
              show: false,
  } : undefined,
}

相关文章:

  • HBase性能优化秘籍:让数据处理飞起来
  • CPU和GPU的区别
  • 玩转表观,ATAC-seq+RNA-seq共探染色质重塑机制研究
  • 如何在WPS打开的word、excel文件中,使用AI?
  • S7-1200的三种启动模式
  • python flask 使用教程 快速搭建一个 Web 应用
  • FFmpeg+WebSocket+JsMpeg实时视频流实现方案
  • 汽车智能制造企业数字化转型SAP解决方案总结
  • Java常用设计模式-代码实例详解
  • 基于windows的docker-desktop安装kubenetes以及dashboard
  • AI开源:是潘多拉魔盒还是希望之光?
  • 【SPIE出版,见刊快速,EI检索稳定,浙江水利水电学院主办】2025年物理学与量子计算国际学术会议(ICPQC 2025)
  • [C#]C# winform部署yolov12目标检测的onnx模型
  • 2024电子取证“獬豸杯”WP
  • Python标准库装饰器完全指南
  • 网站结构优化:加速搜索引擎收录的关键
  • docker独立部署milvus向量数据库
  • 【量化科普】Volatility,波动率
  • 已知点矩阵的三个顶点坐标、行列数和行列的间距,计算得出剩余所有点的坐标
  • 如何正确看待 AI 的推理能力?走出人类中心主义
  • 企业门户网站模板html/怎么开个人网站
  • aspcms做双语网站修改配置/百度查重入口免费版
  • 网站建设存在风险/汕头seo关键词排名
  • 东港网站建设/百度指数的搜索指数
  • 怎么做网站变更/百度灰色词排名代发
  • 武汉网站建设网站/seo深圳优化