echarts绘制甘特图

说在前面

项目上有需求,需要在大屏上展示进度甘特图,调研了DHTMLX普加甘特图,效果都不是特别符合需求现状,查询了一些博客,决定使用echarts来绘制甘特图。

实现效果展示

在这里插入图片描述

实现思路分析

1、应该采用柱状图,且柱子横向分布

将data赋值给yAxis即可;

2、纵坐标应为进度图中的进度节点

正常赋值即可,注意顺序,可添加inverse: true,改变顺序,axisTick: { show: false } 去除刻度

3、甘特图数据量化

这里需要注意的是,对于进度计划中提出的开始、结束日期是不好量化的,所以这里要转换一下思路;
使用结束日期减去开始日期来计算天数,来表达某条任务持续的时间。

4、横坐标应展示日期

上面说了使用差值天数来标识任务持续时间,所以这里单纯设置日期的横坐标是无法对应的。
设置两个x轴,一个x轴是日期(x1),另外一个x轴type为value类型(x2),可以理解为x2是真实的x轴,x1是虚假的x轴,但是我们要将x2进行隐藏,来达到模拟的效果;
当然,这两个轴的数据需要对应,下面会展开说。

5、对于一些前期未开工的数据处理

柱状图的数据是连续的,如果需要实现前面“镂空”的效果,则需要再次使用双x轴的视觉欺骗,使用纯透明的柱状图来填充前面缺失的部分;

部分技术实现代码

计算天数差值:

subDate(startDate, endDate) {let result = (endDate.getTime() - startDate.getTime()) / 3600000 / 24;return result
},

x轴的设置:
加入我们想展示甘特图从’2023-04-01’ - '2024-06-30’之间的数据,则x轴应为:

        let xAxisData = ['2023.04','2023.05','2023.06','2023.07','2023.08','2023.09','2023.10','2023.11','2023.12','2024.01','2024.02','2024.03','2024.04','2024.05','2024.06'];xAxis: [{ // 真实的x轴,但是隐藏了min: 0,max: this.subDate(new Date('2023-04-01'), new Date('2024-06-30')) + 1,type: "value",axisLabel: { show: false },splitLine: { show: false },},{ // 虚假的x轴,展示出来type: "category",boundaryGap: true,data: xAxisData,axisTick: { show: false }, //刻度axisLine: { show: false },splitLine: {show: true,},
]

数据从0开始,到天数总数为止,比如2023年4月有30天,横轴总长就代表了30天,也代表了2023-04这个刻度。以此类推,表示日期的x轴对应的天数就 等于数值的天数了,完成了数据的对应。

透明柱状图数据计算

let minDate = new Date("2023-04-01");
touming.push(this.subDate(minDate, new Date(item.planBeginDate)))

开始日期为4.1号,比如任务a计划开始时间为4.15号,则距离y轴的距离就应该为 14,这部分就置为透明即可。
带颜色柱状图数据计算

notSelectedData.push(this.subDate(new Date(item.planBeginDate),new Date(item.planEndDate)) + 1
);

柱状图绘制:

let yanse = {normal: { barBorderColor: "rgba(0,0,0,0)", color: "rgba(0,0,0,0)" },emphasis: { barBorderColor: "rgba(0,0,0,0)", color: "rgba(0,0,0,0)" },
};
series: [{type: "bar",barWidth: 15,stack: "stackNotSelected", //叠加效果barGap: "-100%", //重叠效果itemStyle: transparentStyle,data: touming,},{type: "bar",barWidth: 15,stack: "stackNotSelected", //叠加效果barGap: "-100%", //重叠效果itemStyle: {normal: {color: "#49A7FF",},},data: yanse,label: {show: false,},}
],

说到最后

本文介绍了使用echarts实现甘特图效果的实现思路分析以及部分技术方案,有兴趣的各位可以动手实践。

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

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

相关文章

ORACLE常用基础

. 1.oracle开机启动流程 su - oracle lsnrctl start lsnrctl status sqlplus / as sysdba startup 2、如何查看数据库版本 select * from v$version; 3.如何查看用户从那个设备连接的数据库 SELECT DISTINCT machine , terminal FROM V$SESSION; 4.如何查看表结构 selec…

Android 14重要更新预览

Android 14重要更新预览 国际化 Android 14 在 Android 13 的基础上进一步扩展了按应用设定语言功能,提供了一些额外的功能: 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以…

【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入原始方案实现实现问题分析 介绍基础介绍登场角色 案例实现案例一类图实现分析 案例二类图实现 观察者模式在JDK源码的应用总结文章说明 案例引入 有一个天气预报项目,需求如下: 气象站可以将每天测量到的温度、湿度、气压等等以公告的…

Apache Kafka Learning

目录 一、Kafka 1、Message Queue是什么? 2、Kafka 基础架构 3、Kafka安装 二、Maven项目测试 1、Topic API 2、生产者&消费者 一、Kafka Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式…

Flutter 实现按位置大小比例布局的控件

文章目录 前言一、如何实现?1、数值转成分数2、RowFlexible布局横向3、ColumnFlexible布局纵向 二、完整代码三、使用示例1、基本用法2、四分屏3、六分屏4、八分屏5、九分屏6、414分屏 总结 前言 做视频监控项目时需要需要展示多分屏,比如2x2、3x3、414…

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架,在这个应用场景中,LangChain 将与 Amazon DynamoDB 紧密结合,构建一个完整的基于大语言模型的聊天应用。 本次活动,我们特意邀请了亚马逊云科…

C#类型转换

🍟数据类型 大体分为三个大类型:整型(其中又分为有符号整型、无符号整型)、浮点型、特殊类型 注意:浮点数在初始化时要在值后加上后缀,双精度浮点数decimal的后缀为“M”、单精度浮点数double和float的后…

AI相机“妙鸭相机”原理分析和手动实现方案

妙鸭相机 一个通过上传大约20张照片,生成专属自拍。在2023年7月末爆火,根据36Kr报道,妙鸭相机系阿里系产品,挂靠在阿里大文娱体系下,并非独立公司。 使用方法是上传20张自拍照片,之后可以选择模板生成自己…

算法通过村——Hash和队列问题解析

算法的备胎Hash和找靠山的队列 备胎Hash Hash,不管是算法,还是在工程中都会大量使用。很多复杂的算法问题都用Hash能够轻松解决,也正是如此,在算法例就显得没什么思维含量,所以Hash是应用里的扛把子,但在算…

【安全测试】安全测试威胁建模设计方法STRIDE

目录 背景 TM(ThreatModeling) 实践 具体流程 资料获取方法 背景 目前安全测试一般都存在如下问题: 安全测试人员不懂业务,业务测试人员不懂安全,安全测试设计出现遗漏是无法避免的安全测试点繁多复杂,单点分析会导致风险暴…

selenium 截屏

当前环境: Windows 10 Python 3.7 selenium 3.141.0 Google Chrome 115.0.5790.110 (64 位) from selenium import webdriver import base64if __name__ __main__:#driver webdriver.Chrome()driver.get(https://www.baidu.com/)# 1.…

简单游戏截图_可控截取内容2

一个需求 我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换) 将截图排到列表中,在场景UI中展示出来 如何做 相机要能够看到不同的画面 将当前帧画面存储下来 将存储的画面展示出…

【2023年电赛国一必备】E题报告模板--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 (部分) 摘要 本文使用K210芯片设计了一个运动目标控制与自动追踪系统。系统包括使用深度学习进行识别激光位置,其中红色激…

Emacs之将.el编译成bin(一百二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

vscode如何退出/切换 github 账号

退出/切换 github 账号 左下角点击头像按钮,选择注销,然后再重新登录

JS进阶-Day3

🥔:永远做自己的聚光灯 JS进阶-Day1——点击此处(作用域、函数、解构赋值等) JS进阶-Day2——点击此处(深入对象之构造函数、实例成员、静态成员等;内置构造函数之引用类型、包装类型等) 更多JS…

boost beast http server 测试

boost beast http client boost http server boost beast 是一个非常好用的库&#xff0c;带上boost的协程&#xff0c;好很多东西是比较好用的&#xff0c;以下程序使用四个线程开启协程处理进入http协议处理。协议支持http get 和 http post #include <boost/beast/cor…

Java与Kotline Funcation函数与参数函数的详解

一.介绍 在现在以IDE为开发工具的时代&#xff0c;各种开发语言都有&#xff0c;kotlin的语法势头比较强&#xff0c;今天我们将介绍在项目中出现比较多的两种函数&#xff0c;一种是参数函数&#xff0c;还有一种就是Function函数 如果你不了匿名函数请阅读以下文档&#xff…

ISC 2023︱诚邀您参与赛宁“安全验证评估”论坛

​​8月9日-10日&#xff0c;第十一届互联网安全大会&#xff08;简称ISC 2023&#xff09;将在北京国家会议中心举办。本次大会以“安全即服务&#xff0c;开启人工智能时代数字安全新范式”为主题&#xff0c;打造全球首场AI数字安全峰会&#xff0c;赋予安全即服务新时代内涵…

常见的设计模式(超详细)

文章目录 单例模式饿汉式单例模式懒汉式单例模式双重检索单例模式 工厂模式简单工厂模式工厂&#xff08;方法&#xff09;模式抽象工厂模式 原型模式代理模式 单例模式 确保一个类只有一个实例&#xff0c;并且自行实例化并向整个系统提供这个实例。 饿汉式单例模式 饿汉式单…