echarts柱状图每根柱子添加警戒值/阈值,分段警戒线

news2024/9/27 12:28:26

需求:柱状图每根柱子都添加单独的警戒值(黄色线部分),效果图如下:
在这里插入图片描述
实现方式我这有两种方案,如下介绍。
方案1:使用echarts的标线markLine实现(ps:此种方案有弊端:需要一一设置每个柱子的标线起始点,不好控制,不太建议使用)
代码如下:

<body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
         // 警戒线
        let markLines = []
        let markLineValue = [10,20,30,40,30] //警戒线值
        let markLineItem = [
                                //第一条警戒线
                                {
                                    yAxis: markLineValue[0],
                                    x: 60, //设置警戒线的起点偏移量
                                    lineStyle: { type: "solid", color: "yellow", width: 3 },
                                    label: { show: true, color: "yellow", position: "insideMiddleBottom", formatter: markLineValue[0] + 'db' },
                                },
                                {
                                    position: "middle",
                                    yAxis: markLineValue[0],
                                    x: 110, //设置警戒线的终点偏移量
                                    lineStyle: { type: "solid", color: "yellow", width: 3 },
                                    label: { show: true, position: "insideMiddleBottom" },
                                }
                            ]
        markLines.push(markLineItem);
        //设置每一条标线的起始偏移量,根据实际情况自行改之
        for (let i = 1; i <markLineValue.length; i++) {
            let item = JSON.parse(JSON.stringify(markLines[i-1]))
            let xStart = item[0].x
            let xEnd = item[1].x
            item[0].x = xStart + 115
            item[0].yAxis = markLineValue[i]
            item[0].label.formatter = markLineValue[i] +'db'
            item[1].x = xEnd + 115
            item[1].yAxis = markLineValue[i]
            markLines.push(item)
        }
        var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {
                show: true,
                trigger: 'axis'
            },
            legend: {
                data: ['销量']
            },
            xAxis: {
                data: ['衬衫11111111111111111', '羊毛衫', '雪纺衫', '裤子', '高跟鞋'],
                axisLabel: {
                    // 文字省略
                    formatter: function (value) {
                        if (value.length > 3) {
                            return `${value.slice(0, 3)}...`
                        }
                        return value
                    }
                }
            },
            yAxis: {
                splitLine: { show: false }
            },
            grid: {
                containLabel: true,
                top: 30,
                left: 10,
                right: 10,
                bottom: 8
            },
            series: [
                {
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10],
                    barWidth: '50px', // 柱图宽度
                    itemStyle: {
                        normal: {
                            label: {
                                formatter: '{c}' + 'db',
                                show: true,
                                position: 'top',
                                textStyle: {
                                    color: 'blue'
                                }
                            }
                        }
                    },
                    //设置柱状图背景
                    showBackground: true,
                    backgroundStyle: {
                        color: 'rgba(180, 180, 180, 0.2)'
                    },
                    markLine: {
                        symbol: "none",               //去掉警戒线最后面的箭头
                        data:markLines
                         }
                    }]
        };
        // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    </script>
</body>

方案2:使用echarts的自定义图形custom实现(此方案较方案一更实用)
代码如下:

<body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        let markLineValue = [10,20,30,40,30] //警戒线值
        var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {
                show: true,
                trigger: 'axis'
            },
            legend: {
                data: ['销量']
            },
            xAxis: {
                data: ['衬衫11111111111111111', '羊毛衫', '雪纺衫', '裤子', '高跟鞋'],
                axisLabel: {
                    // 文字省略
                    formatter: function (value) {
                        if (value.length > 3) {
                            return `${value.slice(0, 3)}...`
                        }
                        return value
                    }
                }
            },
            yAxis: {
                splitLine: { show: false }
            },
            grid: {
                containLabel: true,
                top: 30,
                left: 10,
                right: 10,
                bottom: 8
            },
            series: [
                {
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10],
                    barWidth: '50px', // 柱图宽度
                    itemStyle: {
                        normal: {
                            label: {
                                formatter: '{c}' + 'db',
                                show: true,
                                position: 'top',
                                textStyle: {
                                    color: 'blue'
                                }
                            }
                        }
                    },
                    //设置柱状图背景
                    showBackground: true,
                    backgroundStyle: {
                        color: 'rgba(180, 180, 180, 0.2)'
                    }
                    },
                    {
                    type: 'custom',
                    // 图形渲染逻辑函数
                    renderItem: function renderItem(param, api) {
                    //获取每根柱子中点的x,y坐标
                        var point = api.coord([api.value(0), api.value(1)]);
                        return {
                            type: 'line',
                            transition: ['shape'],
                            shape: {
                                x1: point[0] - 25, //每根柱子的起点x轴坐标,我这的柱子宽度为50px,起点就为point[0]-50/2
                                x2: point[0] + 25, //每根柱子的终点x轴坐标
                                y1: point[1],
                                y2: point[1]
                            },
                            style: api.style({
                                stroke: api.visual('color'),
                                lineWidth: 3,
                            })
                        };
                    },
                    itemStyle: {
                        borderType: 'soild',   //可以控制警示线的样式
                        normal: {
                            label: {
                                formatter: '{c}' + 'db',
                                show: true,
                                position: 'bottom',
                                textStyle: {
                                    color: 'yellow'
                                }
                            },
                            color: "yellow",
                        }
                    },

                    z: 999, //控制图形前后顺序,数值小会被数值大的覆盖
                    data: markLineValue   //警示线的数值
                }
                    ]
        };
        // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    </script>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/805281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序通过ip+port+路径获取服务器中的图片

配置IIS 首先需要配置IIS。 打开控制面板&#xff0c;接下来的流程按下图所示。 安装好后&#xff0c;按“win”键&#xff0c;搜索IIS 选择一个ip地址&#xff0c;或手动填写&#xff0c;端口号按需更改 填写别名和物理路径&#xff0c;别名就是后续通过url访问物理…

初步了解预训练语言模型BERT

本文字数&#xff1a;&#xff1a;4024字 预计阅读时间&#xff1a;12分钟 BERT是由Google提出的预训练语言模型&#xff0c;它基于transformer架构&#xff0c;被广泛应用于自然语言处理领域&#xff0c;是当前自然语言处理领域最流行的预训练模型之一。而了解BERT需要先了解注…

Mock-MOCO使用过程

一、jar包下载&#xff1a;https://github.com/dreamhead/moco 二、准备mock的json文件 data.json内容&#xff1a; ####GET请求 [{"description": "response使用Content-Type为charsetGBK编码格式来查看返回信息为中文的内容","request": {&q…

LeetCode101. 对称二叉树

101. 对称二叉树 一、题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&am…

一百三十七、Hive——HQL运行报错(持续更新中)

一、timestamp字段与int字段相加 &#xff08;一&#xff09;场景 change_time字段是timestamp字段&#xff0c;代表一个红绿灯周期的开始时间&#xff08;先是绿灯、再是黄灯、最后红灯&#xff09;&#xff0c;而green是int字段&#xff0c;代表绿灯的秒数&#xff0c;现在…

Linux常用基础命令-------你想要的我都有❀

文章目录❀ ❀ls命令 ❀cd命令 ❀pwd命令 ❀date命令 ❀创建、删除文件和目录命令 ❀alias命令 ❀复制、移动、重命名、查看&#xff08;文件、目录&#xff09;命令 ❀find查找、wc统计命令 ❀vi/vim命令 1、打开文件 2、工作模式 vi与vim的四个模式 进入编辑模式…

Verilog语法学习——LV2_异步复位的串联T触发器

LV2_异步复位的串联T触发器 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述&#xff1a; 用verilog实现两个串联的异步复位的T触发器的逻辑&#x…

MacOS本地安装Hadoop3

金翅大鹏盖世英&#xff0c;展翅金鹏盖世雄。 穿云燕子锡今鸽&#xff0c;踏雪无痕花云平。 ---------------- 本文密钥&#xff1a;338 ----------------- 本文描述了在macbook pro的macos上安装hadoop3的过程&#xff0c;也可以作为在任何类linux平台上安装hadoop3借鉴。 …

传染病模型

title: 传染病模型 date: 2023-7-24 10:55:00 updated: 2023-7-24 10:55:00 tags: 算法数学建模传染病模型matlab categories: 数学建模 传染病模型中的符号表示 SI模型&#xff08;艾滋传染模型&#xff09; %% 直接求微分方程的解析解 dsolve(Dx1 -0.1 * x1 * x2 / 1000, D…

微服务契约测试框架Pact-Python实战

Pact是一个契约测试框架&#xff0c;有多种语言实现&#xff0c;本文以基于pact-python探究契约测试到底是什么&#xff1f;以及如何实现 官网&#xff1a;自述文件 |契约文档 (pact.io) 契约测试步骤 1、为消费者写一个单元测试&#xff0c;让它通过&#xff0c;并生成契约…

阿里Java开发手册~集合处理

1. 【强制】关于 hashCode 和 equals 的处理&#xff0c;遵循如下规则&#xff1a; 1 &#xff09; 只要重写 equals &#xff0c;就必须重写 hashCode 。 2 &#xff09; 因为 Set 存储的是不重复的对象&#xff0c;依据 hashCode 和 equals 进行判断&#xff…

MySQL之深入InnoDB存储引擎——物理文件

文章目录 一、参数文件二、日志文件三、表结构定义文件四、InnoDB 存储引擎文件1、表空间文件2、重做日志文件 一、参数文件 当 MySQL 实例启动时&#xff0c;数据库会先去读一个配置参数文件&#xff0c;用来寻找数据库的各种文件所在位置以及指定某些初始化参数。在默认情况…

vue启动失败问题

解决办法情况1&#xff1a;确认自己是否进入了vuedemo项目的目录。 解决办法情况2&#xff1a;目录进入正确npm start错误&#xff0c;这时可以进入自己电脑的项目文件中去删除node_modules和package-lock.json&#xff0c;然后回到控制台npm i或npm install安装依赖&#xff0…

SAP ABAP 自定义表数据导入

一:效果展示&#xff1a; 读取 Excel 数据到 SAP 数据库表。 二&#xff1a;源码&#xff1a; *&---------------------------------------------------------------------* *& Report ZTEST_DRW02 *&----------------------------------------------------------…

Unity游戏源码分享-2.5D塔防类游戏

Unity游戏源码分享-2.5D塔防类游戏 项目地址&#xff1a; https://download.csdn.net/download/Highning0007/88118947

《Federated Unlearning via Active Forgetting》论文精读

文章目录 1、概述2、方法实验主要贡献框架概述 3、实验结果比较方法实验结果忘却完整性忘却效率模型实用性 4、总结 原文链接&#xff1a; Federated Unlearning via Active Forgetting 1、概述 对机器学习模型隐私的⽇益关注催化了对机器学习的探索&#xff0c;即消除训练数…

【Spring】什么是Bean的生命周期及作用域,什么是Spring的执行流程?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 在前面的播客中讲解了如何从Spring中存取Bean对象&#xff0c;那么本篇我们来讲解Bean对象的生命周期是什么&#xff0c;Bean对象的6种作用域分别是什么&#xff0c;都有哪些区别&#xff…

WebDAV之π-Disk派盘 + 静读天下

静读天下 支持WebDAV方式连接π-Disk派盘。 静读天下是一款备受千万Android用户好评的阅读工具,如果你享受本地阅读带来的宁静与踏实,同时对阅读器又有着苛刻要求,符合设计简洁、高效易用、功能强大且稳定,那么不妨试试这款app。静读天下支持txt、html、epub、umd、fb2、…

Python数据分析实战-利用limit 与 offset进行数据库数据批量查询与处理(附源码和实现效果)

实现功能 利用limit 与 offset进行数据库数据批量查询与处理 实现代码 def query_batch(self,engine,batch_step,end,sql):session make_session(engine)cursor session.execute(sql.format(batch_step, end))fields cursor._metadata.keysdf pd.DataFrame([dict(zip(fi…

LeetCode-116-填充每个节点的下一个右侧节点指针

一&#xff1a;题目描述&#xff1a; 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 next 指针&#xff0c;让这个指…