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

echarts的柱状图的重叠和堆叠实现两个柱体的显示和之前的差值显示

效果图
在这里插入图片描述

主要思路

准备三个柱体(原计划,实际进度,差值)
原计划和实际进度设置成重叠

          {barWidth: 20,// yAxisIndex: 1,z: 1,name: '原计划',type: 'bar',stack: 'ab',emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label: {show: true},itemStyle: {emphasis: {barBorderRadius: 10},normal: {barBorderRadius: 10}},data: this.planProcessData.map((item) => {return {value: item,label: {show: !(item < 10),formatter: item + '%',position: 'insideRight',textStyle: {color: '#262626',fontSize: 12}}}})},
 {barGap: '-100%', /* 可以重叠*/barWidth: 20,yAxisIndex: 0,z: 2,itemStyle: {emphasis: {barBorderRadius: 10},normal: {barBorderRadius: 10}},data: this.realityProcessData.map((item) => {return {value: item,label: {show: true,formatter: item + '%',position: item < 10 ? 'right' : 'insideRight',textStyle: {color: '#262626',fontSize: 12}}}}),type: 'bar',label: {show: true},emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},name: '实际进度'}

将实际进度的 barGap: ‘-100%’, 就可以重叠啦

然后设置差值柱体

{barWidth: 20,// yAxisIndex: 1,z: 1,stack: 'ab', // 这个保持一样就可以堆叠data: this.differenceData.map((item) => {return {value: item,label: {show: true,formatter: (params) => { // 核心部分 formatter 可以为字符串也可以是回调// var that = this// console.log('0904', this.differenceData)if (params.value) { // 如果当前值存在则拼接return '↓' + ' ' + '-' + params.value + '%'} else { // 否则返回个空return ''}},position: 'insideLeft',textStyle: {color: '#E20000',fontSize: 12}}}}),type: 'bar',emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label: {show: true},name: '差值'},

要使差值跟原计划堆叠,他们要是设置 stack: ‘ab’, 这个保持一样就可以堆叠,然后将差值柱体的背景颜色白色
在这里插入图片描述

然后将显示的值的位置position改为insideLeft
在这里插入图片描述

就可以实现上面的效果啦

3.要是重叠的两个柱体不完全重叠

效果在这里插入图片描述

要在原计划设置宽度
在这里插入图片描述

再实际进度中宽度要设置小一点,并且重合度80%
在这里插入图片描述

4.设置最大度是100%,但是内容可以超过

在这里插入图片描述
这样子就可以显示出来
在这里插入图片描述

5.在series中,在formatter,自定义图片

效果图
在这里插入图片描述

然后再rich里面定义
在这里插入图片描述

最后在formatter使用
在这里插入图片描述

首先要引入图片
在这里插入图片描述

补充

1.如果你想在这里使用this,一定要弄箭头函数

在这里插入图片描述

2.如果你想要鼠标移到柱体上去,其他一些柱体不会透明

在这里插入图片描述

要在在每个柱体里设置
在这里插入图片描述

3.给柱状图添加点击事件

在这里插入图片描述

点击事件函数里面也是不能直接获取到this,需要let that = this

完整代码

initData() {const PieEchartBox = this.$refs.projectChartconst myPieEchart = this.$echarts.init(PieEchartBox)myPieEchart.setOption({color: ['#E3F1FF', '#fff', '#1CCBD3'],legend: {data: ['原计划', '差值', '实际进度'],show: false},tooltip: {trigger: 'axis',extraCssText: 'width:200px',valueFormatter: function(value) { // 里面的值加内容return value + '%'},axisPointer: {type: 'shadow'},formatter: "<div style='display:block;word-break: break-all;word-wrap: break-word;white-space:pre-wrap;margin-bottom: 10px'>" + '{b}' + '</div>' +"<div style='display: flex;justify-content: space-between;'><div style='display: flex;align-items: center;'><div style='border-radius: 50%;width: 8px;height: 8px;background: #7ECAD3;margin-right: 10px'></div>" + '<span>' + '{a0}' + '</span></div><div>{c0}%</div></div>' +"<div style='display: flex;justify-content: space-between;'><div style='display: flex;align-items: center;'><div style='border-radius: 50%;width: 8px;height: 8px;background: #5682cc;margin-right: 10px'></div>" + '<span>' + '{a2}' + '</span></div><div>{c2}%</div></div>'},grid: {left: '10',right: '6%',bottom: '3%',top: '2%',containLabel: true},yAxis: [{type: 'category',axisTick: {length: 10},axisLine: 'none',data: this.topicNameData,axisLabel: {margin: 10,interval: 0,lineHeight: 14,textStyle: {fontSize: 12,color: '#666666'},formatter: function(value) {var ret = ''// 拼接加\n返回的类目项var valLength = value.length// X轴类目项的文字个数var maxLength = 10 // 每项显示文字个数var rowN = Math.ceil(valLength / maxLength) // 类目项需要换行的行数if (rowN > 1) { // / 如果类目项的文字大于3,for (var i = 0; i < rowN && i < 2; i++) {var temp = ''// 每次截取的字符串var end = ''var start = i * maxLength// 开始截取的位置if (i === 1 && valLength > 20) {end = start + 9// 结束截取的位置} else {end = start + maxLength// 结束截取的位置}// 这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧if (i === 1 && valLength > 20) {temp = value.substring(start, end) + '...'// 结束截取的位置} else {temp = value.substring(start, end) + '\n'// 结束截取的位置}ret += temp // 凭借最终的字符串}return ret} else {return value}}}},{show: false,type: 'category',axisTick: 'none',data: [],axisLine: 'none'}],xAxis: {type: 'value',interval: 10,max: 100.001, // 为了然差值显示出来axisLabel: {show: true,textStyle: {fontSize: 10},itemWidth: 123,formatter: '{value}%' // 给Y轴数值添加百分号},position: 'top'},series: [{barWidth: 24,barCategoryGap: '60%',// yAxisIndex: 1,z: 1,name: '原计划',type: 'bar',stack: 'ab',emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label: {show: true},itemStyle: {emphasis: {barBorderRadius: 10},normal: {barBorderRadius: 10}},data: this.planProcessData.map((item) => {return {value: item,label: {show: !(item < 10),formatter: item + '%',position: 'insideRight',textStyle: {color: '#262626',fontSize: 12}}}})},{barWidth: 20,barCategoryGap: '60%',// yAxisIndex: 1,z: 1,stack: 'ab', // 这个保持一样就可以堆叠data: this.differenceData.map((item) => {return {value: item,label: {normal: {show: true,formatter: (params) => { // 核心部分 formatter 可以为字符串也可以是回调if (params.value) { // 如果当前值存在则拼接return '{imgDown|}' + ' ' + '-' + params.value.toFixed(2) + '%'} else { // 否则返回个空return ''}},rich: {imgDown: {paddingLeft: 10,backgroundColor: {image: downIcon},width: 8,height: 12}},position: 'insideLeft',textStyle: {color: '#E20000',fontSize: 12}}}}}),type: 'bar',emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label: {show: true},name: '差值'},{barGap: '-80%', /* 可以重叠*/barWidth: 14,barCategoryGap: '60%',yAxisIndex: 0,z: 2,itemStyle: {emphasis: {barBorderRadius: 10},normal: {barBorderRadius: 10}},data: this.realityProcessData.map((item) => {return {value: item,label: {show: true,formatter: item + '%',position: item < 10 ? 'right' : 'insideRight',textStyle: {color: '#262626',fontSize: 12}}}}),type: 'bar',label: {show: true},emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},name: '实际进度'}]})const that = thismyPieEchart.on('click', function(param) {console.log('1019', that.dictTypeTopicList, param)let topicType = ''that.dictTypeTopicList.forEach((res) => {if (param.name === res.label) {topicType = res.valuereturn}})that.$router.push({path: '/projectDetails',query: {topicName: param.name,topicType: topicType}})})}

相关文章:

echarts的柱状图的重叠和堆叠实现两个柱体的显示和之前的差值显示

效果图 主要思路 准备三个柱体&#xff08;原计划&#xff0c;实际进度&#xff0c;差值&#xff09; 原计划和实际进度设置成重叠 {barWidth: 20,// yAxisIndex: 1,z: 1,name: 原计划,type: bar,stack: ab,emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label…...

泛积木-低代码 使用攻略

文档首发于 泛积木-低代码 使用攻略 我们以大纲的方式&#xff08;总体把握&#xff09;讲述如何高效、便捷使用 泛积木-低代码。 权限 首先说下权限&#xff0c;在 系统设置 / 权限设置 菜单内&#xff0c;我们可以新增调整项目内的权限&#xff0c;默认拥有管理员和成员两…...

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远控介绍及界面编写

红队专题 招募六边形战士队员[1]远控介绍及界面编写1.远程控制软件演示及教程简要说明主程序可执行程序 服务端生成器主机上线服务端程序 和 服务文件管理CMD进程服务自启动主程序主对话框操作菜单列表框配置信息 多线程操作非模式对话框 2.环境&#xff1a;3.界面编程新建项目…...

机器学习(五)如何理解机器学习三要素

1.8如何理解机器学习三要素 统计学习模型策略算法 模型&#xff1a;规律yaxb 策略&#xff1a;什么样的模型是好的模型&#xff1f;损失函数 算法&#xff1a;如何高效找到最优参数&#xff0c;模型中的参数a和b 1.8.1模型 机器学习中&#xff0c;首先要考虑学习什么样的…...

【计算机视觉】3D视觉

文章目录 一、基本问题二、三个坐标系 X w \boldsymbol{X}_w Xw​到 X c \boldsymbol{X}_c Xc​的转换 X c \boldsymbol{X}_c Xc​到 x i \boldsymbol{x}_i xi​的转换投影矩阵尺度模糊问题 三、相机标定四、立体视觉 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#x…...

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL&#xff0c;匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…...

[动态规划] (一) LeetCode 1137.第N个泰波那契数

[动态规划] (一) LeetCode 1137.第N个泰波那契数 文章目录 [动态规划] (一) LeetCode 1137.第N个泰波那契数题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结空间优化代码实现 总结 1137. 第 N 个泰波那契数 题目解析 解题思路 状态表示 (1) 题目要…...

SystemVerilog语法中,在Class中引用层次化信号

在class中可以像在verilog中一样&#xff0c;直接在class中引用层次化信号。示例如下&#xff1a; 1.DUT模块&#xff0c;文件名为top.v。 module top (input clk ,input rst_n ,//总线信号 input wr_n ,input rd_n ,input cs0_n ,input cs7_n …...

磁盘的结构(磁道,扇区,盘面,柱面,物理地址)

目录 1.磁盘、磁道、扇区的概念1.磁盘2.磁道3.扇区 2.如何在磁盘中读/写数据3.盘面、柱面的概念4.磁盘的物理地址1.根据地址读取一个“块” 5.磁盘的分类1.活动头磁道2.固定头磁盘3.根据盘片是否可更换 1.磁盘、磁道、扇区的概念 1.磁盘 磁盘的表面由一些磁性物质组成&#xf…...

uni-app集成uni-simple-router,报错:Uncaught ReferenceError: ROUTES is not defined

参考连接&#xff1a;GitHub - SilurianYang/uni-read-pages: read pages.json file to generate the routes table 作用&#xff1a;配置 vue.config.js 通过 webpack注入全局变量 问题&#xff1a;缺少Webpack 配置环境 方法&#xff1a; 项目根目录下打开终端&#xff0c;…...

几个常用的nosql数据库的操作方式

dynamoDB 键 partition key&#xff1a;分区键 定义&#xff1a;分区键是用于分布数据存储的主键&#xff0c;每个项&#xff08;Item&#xff09;在表中都必须有一个唯一的分区键值。 特点&#xff1a; 唯一性&#xff1a;每个分区键值在表中必须是唯一的&#xff0c;这是因为…...

如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本

nvm-windows 是一个用于管理在 Windows 上安装的多个 Node.js 版本的工具。以下是安装和使用 nvm-windows 的步骤&#xff1a; 第1步&#xff1a;下载 nvm-windows 访问 nvm-windows 的 GitHub发布页面.下载最新版本的 nvm-setup.zip 文件。 第2步&#xff1a;安装 nvm-wind…...

公司电脑禁用U盘的方法

公司电脑禁用U盘的方法 安企神U盘管理系统下载使用 在这个复杂的数据时代&#xff0c;保护公司数据的安全性至关重要。其中&#xff0c;防止未经授权的数据泄露是其中的一个关键环节。U盘作为一种常用的数据传输工具&#xff0c;也成为了潜在的安全风险。因此&#xff0c;公司…...

Elasticsearch 7.X版本常用语法语句

文章目录 监控相关 API查看健康状况查看所有节点查看所有节点详细信息查看主节点查看所有索引查看所有分片 索引管理创建索引查看索引查看索引字段类型修改索引字段删除索引别名给索引添加别名查询某个索引下的别名给索引更换别名给索引解绑别名一个别名绑定多个索引查询index_…...

Python分享之数学与随机数 (math包,random包)

我们在Python运算中看到Python最基本的数学运算功能。此外&#xff0c;math包补充了更多的函数。当然&#xff0c;如果想要更加高级的数学功能&#xff0c;可以考虑选择标准库之外的numpy和scipy项目&#xff0c;它们不但支持数组和矩阵运算&#xff0c;还有丰富的数学和物理方…...

Linux 基本语句_8_C语言_文件控制

为了解决多个进程同时操作一个文件&#xff0c;产生一些情况&#xff0c;通常对文件进行上锁&#xff0c;已解决对共享文件的竞争 对打开文件进行各种操作&#xff1a; int fcentl(int fd, int cmd, .../*arg*/如果cmd与锁操作有关&#xff0c;那么fcentl函数的第三个参数就要…...

博通BCM575系列 RDMA 网卡驱动 bnxt_re 分析(一)

简介 整个BCM系列驱动分成以太网部分(bnxt_en.ko)和RDMA部分(bnxt_re.ko), 两个模块之间通过内核的auxiliary_bus进行管理.我们主要分析下bnxt_re驱动. 代码结构 这个驱动的核心是 qplib_fp.c, 这个文件主要包含了驱动的数据路径, 包括Post Send, Post Recv, Poll CQ流程的实…...

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点&#xff1a;快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1&#xff1a;不同类型字段导出Sample2&#xff1a;…...

Navicat for MySQL 视图创建使用方法

创建视图步骤&#xff1a; 点击新建&#xff1b;选择视图&#xff1b;点击视图创建工具&#xff1b;可以在左侧拖拽表到工作区&#xff1b;选择表字段进行连线...

计算机视觉的相机选型

#你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD&#xff08;ChargeCoupled Device&#xff09;或CMOS&#xff08;Complementary Metal Oxide Semiconductor&#xff09;芯片的相机。一般CCD制造工艺更加复杂&#xff0c;也会更贵一点&#xff01; 1、CCD工…...

实体店做商城小程序如何

互联网电商深入各个行业&#xff0c;传统线下店商家无论产品销售还是服务业&#xff0c;仅靠以往的经营模式&#xff0c;很难拓展到客户&#xff0c;老客流失严重&#xff0c;同时渠道单一&#xff0c;无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…...

sql-50练习题0-5

sql练习题0-5题 前言数据库表结构介绍学生表课程表成绩表教师表 0-1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数0-2查询"01"课程比"02"课程成绩小的学生的信息及课程分数0-3查询平均成绩大于等于60分的同学的学生编号和学生…...

Flutter框架实现登录注册功能,不连接数据库

要在Flutter框架中实现登录和注册功能&#xff0c;而不连接数据库&#xff0c;可以使用本地存储来存储用户信息。以下是一个简单的示例&#xff0c;演示如何使用本地存储来实现登录和注册功能。 首先&#xff0c;我们需要添加 shared_preferences 插件到 pubspec.yaml 文件中&…...

持续集成部署-k8s-部署利器-Helm

这里写目录标题 1. Helm 是什么?2. 快速安装 Helm2.1 前置条件2.2 Helm 版本与 K8s 版本对应关系2.3 离线安装 Helm3. Helm 常用命令1. Helm 是什么? Helm 是一个用于 Kubernetes 应用程序部署和管理的开源工具。它可以帮助简化 Kubernetes 应用程序的打包、发布、配置和升级…...

替换所有的问号

这篇也是凑数的 哈哈.... 稍后会整合到算法通关第三关白银挑战 . 描述 : 给你一个仅包含小写英文字母和 ? 字符的字符串 s&#xff0c;请你将所有的 ? 转换为若干小写字母&#xff0c;使最终的字符串不包含任何 连续重复 的字符。 注意 : 不能 修改非 ? 字符 . 题目 : …...

NCCL后端

"NCCL" 代表 "NVIDIA Collective Communications Library"&#xff0c;"NVIDIA 集体通信库"&#xff0c;它是一种由 NVIDIA 开发的用于高性能计算的通信库。NCCL 专门设计用于加速 GPU 群集之间的通信&#xff0c;以便在并行计算和深度学习等领域…...

【API篇】十、生成Flink水位线

文章目录 1、水位线的生成原则2、有序流内置水位线3、乱序流内置水位线4、自定义周期性水位线生成器5、自定义断点式水位线生成器6、从数据源中发送水位线 1、水位线的生成原则 水位线出现&#xff0c;即代表这个时间之前的数据已经全部到齐&#xff0c;之后不会再出现之前的数…...

【Javascript】弹出框

目录 警告框 确认框 提示框 警告框 alert(你好); 确认框 var isConfirm confirm(请确认) console.log( isConfirm); 提示框...

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?php include utils.php;if (isset($_POST[guess])) {$guess (string) $_POST[guess];if ($guess $secret) {$message Congratulations! The flag is: . $flag;} else {$message Wrong. Try Again;} }if (preg_match(/utils\.p…...

mysql用户及权限管理(InsCode AI 创作助手)

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;用于存储和管理大量数据。对于那些需要使用MySQL的管理员和开发人员来说&#xff0c;用户权限管理是确保数据库安全性的至关重要的一环。在本篇技术博客中&#xff0c;我们将深入探讨MySQL的用户权限管理&#xff0c…...