【Echarts】custom自定义图表实现甘特图
效果图

主要注意点:
1、右上角图例visualMap实现
2、visualMap增加formatter
3、series使用custom自定义图表,encode解析四维数组。核心是renderItem方法,必填项,且需要注意要全部定义在options里面!!!!定义在外面,options只留方法名的话,虽然echarts示例中可以粘贴运行,但是一旦移植到项目中无法正常渲染,param和api传递会有问题。项目中要写成renderItem:(params, api) =>{全抄过来}
下面两种示例echarts中粘贴即可运行
动态数据版
var data = [];
var dataCount = 3;
var startTime = +new Date();
var categories = ['服务器调试', 'app流程界面', '安卓程序编码','ios程序编码'];
var types = [{ name: '项目1', color: '#7b9ce1' },{ name: '项目2', color: '#bd6d6c' },{ name: '项目3', color: '#75d874' },{ name: '项目4', color: '#e0bc78' }
];
// Generate mock data
categories.forEach(function (category, index) {var baseTime = startTime;for (var i = 0; i < dataCount; i++) {var typeItem = types[Math.round(Math.random() * (types.length - 1))];var duration = Math.round(Math.random() * 10000);data.push({name: typeItem.name,value: [index, baseTime, (baseTime += duration), duration],itemStyle: {normal: {color: typeItem.color}}});baseTime += Math.round(Math.random() * 2000);}
})// 项目中使用时renderItem要挪到options里面
function renderItem(params, api) {var categoryIndex = api.value(0);var start = api.coord([api.value(1), categoryIndex]);var end = api.coord([api.value(2), categoryIndex]);var height = api.size([0, 1])[1] * 0.6;var rectShape = echarts.graphic.clipRectByRect({x: start[0],y: start[1] - height / 2,width: end[0] - start[0],height: height},{x: params.coordSys.x,y: params.coordSys.y,width: params.coordSys.width,height: params.coordSys.height});return (rectShape && {type: 'rect',transition: ['shape'],shape: rectShape,style: api.style()});
}option = {visualMap:{ // 视觉映射type: 'piecewise', // 'continuous'(连续型)'piecewise'(分段型)。splitNumber: 4, // 数据分割几份left: "right", // 位置top: 0, // 边距orient: "horizontal", // 布局朝向 'horizontal'(横向)'vertical'(纵向)// text:['High', 'Low'], // 两端文本min: 0, // 最小区间值max: 200, // 最大区间值itemHeight: 10,itemWidth: 10,align: 'left', // 图例位置inverse: true, // 控制视觉映射组件的排列方向, 当设置为true时,会使视觉映射组件的排列方向颠倒,即最小值显示在最右边,最大值显示在最左边。pieces: [ // 使用 pieces 属性来精确定义每个分段的取值范围和颜色{ min: 0, max: 19, label: "项目1", color: '#7b9ce1' },{ min: 20, max: 39, label: "项目2", color: '#bd6d6c' },{ min: 40, max: 69, label: "项目3", color: '#75d874' },{ min: 60, max: 89, label: "项目4", color: '#e0bc78' },] }, tooltip: {formatter: function (params) {let str = `${params.marker + params.name}<br/>start:${params.value[1]}<br/>end:${params.value[2]}<br/>value:${params.value[3]}<br/>`return str}},title: {show: true,text: '图表标题',subtext: '',left: '5%',top: '5%',textStyle: {fontSize: 14,height: 40},subtextStyle: {fontSize: 10}},dataZoom: [{type: 'slider',filterMode: 'weakFilter',showDataShadow: false,top: 400,labelFormatter: ''},{type: 'inside',filterMode: 'weakFilter'}],grid: {top: '10%',bottom: '15%',left: '15%',right: '10%'},xAxis: {min: startTime,scale: true,axisLabel: {formatter: function (val) {return Math.max(0, val - startTime) + ' ms';}}},yAxis: {data: categories,axisTick: { show: false },splitLine: { show: false },axisLine: { show: false },},series: [{type: 'custom',// 注意!!!!项目使用中要写成:renderItem:(params, api) =>{全抄过来}renderItem: renderItem, itemStyle: {opacity: 0.8},encode: {x: [1, 2],y: 0,},data: data}]
};
静态数据版
减去很多配置项,静态data更加直观
function renderItem(params, api) {var categoryIndex = api.value(0);var start = api.coord([api.value(1), categoryIndex]);var end = api.coord([api.value(2), categoryIndex]);var height = api.size([0, 1])[1] * 0.6;var rectShape = echarts.graphic.clipRectByRect({x: start[0],y: start[1] - height / 2,width: end[0] - start[0],height: height},{x: params.coordSys.x,y: params.coordSys.y,width: params.coordSys.width,height: params.coordSys.height});return (rectShape && {type: 'rect',transition: ['shape'],shape: rectShape,style: api.style()});
}
option = {tooltip: {show: true,trigger: 'item',},dataZoom: [{type: 'slider',filterMode: 'weakFilter',showDataShadow: false,top: 400,labelFormatter: ''},{type: 'inside',filterMode: 'weakFilter'}],xAxis: {min: 1723552291842,scale: true,axisLabel: {}},yAxis: {data: ['服务器调试','app流程界面','安卓程序编码','ios程序编码'],axisTick: {show: false},splitLine: {show: false},axisLine: {show: false}},series: [{'type': 'custom',renderItem: renderItem,'itemStyle': {'opacity': 0.8},'encode': {'x': [1,2],'y': 0},'data': [{'name': '项目2','value': [0,1723552291842,1723552297017,5175],'itemStyle': {'normal': {'color': '#bd6d6c'}}},{'name': '项目2','value': [0,1723552298382,1723552300321,1939],'itemStyle': {'normal': {'color': '#bd6d6c'}}},{'name': '项目2','value': [0,1723552300586,1723552304290,3704],'itemStyle': {'normal': {'color': '#bd6d6c'}}},{'name': '项目3','value': [1,1723552291842,1723552295815,3973],'itemStyle': {'normal': {'color': '#75d874'}}},{'name': '项目4','value': [1,1723552296867,1723552298584,1717],'itemStyle': {'normal': {'color': '#e0bc78'}}},{'name': '项目3','value': [1,1723552299537,1723552305343,5806],'itemStyle': {'normal': {'color': '#75d874'}}},{'name': '项目3','value': [2,1723552291842,1723552294548,2706],'itemStyle': {'normal': {'color': '#75d874'}}},{'name': '项目3','value': [2,1723552294711,1723552301769,7058],'itemStyle': {'normal': {'color': '#75d874'}}},{'name': '项目2','value': [2,1723552302106,1723552310635,8529],'itemStyle': {'normal': {'color': '#bd6d6c'}}},{'name': '项目2','value': [3,1723552291842,1723552301649,9807],'itemStyle': {'normal': {'color': '#bd6d6c'}}},{'name': '项目2','value': [3,1723552301795,1723552303283,1488],'itemStyle': {'normal': {'color': '#bd6d6c'}}},{'name': '项目3','value': [3,1723552304712,1723552309047,4335],'itemStyle': {'normal': {'color': '#75d874'}}}]}]}
相关文章:
【Echarts】custom自定义图表实现甘特图
效果图 主要注意点: 1、右上角图例visualMap实现 2、visualMap增加formatter 3、series使用custom自定义图表,encode解析四维数组。核心是renderItem方法,必填项,且需要注意要全部定义在options里面!!&…...
【高等代数笔记】003线性方程组的解法(一)
1. 线性方程组的解法 1.1 解线性方程组的矩阵消元法 【例1】解线性方程组 { x 1 3 x 2 x 3 2 3 x 1 4 x 2 2 x 3 9 − x 1 − 5 x 2 4 x 3 10 2 x 1 7 x 2 x 3 1 \left\{\begin{array}{ll} x_{1}3x_{2}x_{3}2 \\ 3x_{1}4x_{2}2x_{3}9 \\ -x_{1}-5x_{2}4x_{3}10 \\…...
Scrapy入门教程
Scrapy入门教程:打造高效爬虫的第一步 1. 引言 在当今的网络世界中,信息是无价的资源。而爬虫工具则是获取这些资源的有力武器。Scrapy 是 Python 生态系统中最强大的爬虫框架之一,它不仅功能强大,而且易于扩展,适用…...
Microsoft VBA Excel VBA学习笔记——双重筛选+复制数值1.0
问题场景 CountryProductCLASS 1CLASS 2CLASS 3CLASS 4CLASS 5CLASS 6…USApple0.3641416030.8918210610.0591451990.7320110290.0509636560.222464259…USBanana0.2300833330.4027262180.1548836670.2988904860.7802326210.028592635…CNApple0.7762370470.5075548320.481978…...
谷歌反垄断官司败诉后,或又面临被拆分风险?
KlipC报道:上周8月5日,美国法院裁定谷歌的搜索业务违反了美国反垄断法,非法垄断在线搜索和搜索文本广告市场。据悉,胜诉的美国司法部正在考虑拆分谷歌。其他选项包括强制谷歌与竞争对手分享更多数据,以及防止其在人工智…...
数据结构入门——06树
1.树 树(Tree)非线性数据结构,它是n(n≥0)个节点的有限集合,它满足两个条件 : 有且仅有一个特定的称为根(Root)的节点; 其余的节点可以分为m(m…...
FFmpeg源码:av_packet_move_ref、av_packet_make_refcounted函数分析
一、av_packet_move_ref函数 (一)av_packet_move_ref函数的声明 av_packet_move_ref函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavcodec/packet.h中: /*** Move every field in src to ds…...
12 中断
12 中断 1、内核中断编程2、顶半部和底半部机制2.1 任务的相关概念2.1.1 分类2.1.2 优先级2.1.3 进程调度2.1.4 休眠sleep 2.2 顶半部和底半部实现机制2.2.1 顶半部特点2.2.2 底半部特点2.2.3 底半部实现方法之:tasklet2.2.4 底半部实现机制之工作队列2.2.5 底半部实现机制之软…...
经典算法题总结:十大排序算法,外部排序和Google排序简介
十大排序算法 就地性:顾名思义,原地排序通过在原数组上直接操作实现排序,无须借助额外的辅助数组,从而节省内存。通常情况下,原地排序的数据搬运操作较少,运行速度也更快。 稳定性:稳定排序在完…...
服务器是什么?怎么选择适合自己的服务器?
在这个数字化的世界中,我们每天都在与各种网站打交道,浏览新闻、购物、看视频等。你是否曾经好奇过,这些网站是如何运行的?它们又是如何实现随时随地可访问的呢? 在这背后,有一个神秘的角色在默默地支撑着…...
区块链技术的应用场景
区块链技术是一种分布式数据库或公共分类账的形式,它保证了数据的完整性和透明性。它最初是为了支持比特币这种加密货币而被发明的,但现在已经被广泛应用于多种领域,包括供应链管理、投票系统、数字身份验证等。 基本概念 区块 (Block) 区块…...
凤凰端子音频矩阵应用领域
凤凰端子音频矩阵,作为一种集成了凤凰端子接口的音频矩阵设备,具有广泛的应用领域。以下是其主要应用领域: 一、专业音响系统 会议系统:在会议室中,凤凰端子音频矩阵能够处理多个话筒和音频源的信号,实现…...
LeetCode-字母异位词分组
题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "na…...
《Linux运维总结:基于x86_64架构CPU使用docker-compose一键离线部署etcd 3.5.15容器版分布式集群》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面对不同的客户部署业务系统࿰…...
WPF动画
补间动画:动画本质就是在一个时间段内对象尺寸、位移、旋转角度、缩放、颜色、透明度等属性值的连续变化。也包括图形变形的属性。时间、变化的对象、变化的值 工业应用场景:蚂蚁线、旋转、高度变化、指针偏移、小车 WPF动画与分类 特定对象处理动画过…...
大数据系列之:统计hive表的详细信息,生成csv统计表
大数据系列之:统计hive表的详细信息,生成csv统计表 一、获取源数据库、源数据库类型、hive数据库名称二、获取hive数据库名、hive表名、数仓层级、空间、维护者信息三、统计hive表信息四、统计源库信息五、合并hive表信息六、生成csv统计表七、完整代码一、获取源数据库、源数…...
flutter 画转盘
import package:flutter/material.dart; import dart:math;const double spacingAngle 45.0; // 每两个文字之间的角度 // 自定义绘制器,ArcTextPainter 用于在圆弧上绘制文字 class ArcTextPainter extends CustomPainter {final double rotationAngle; // 动画旋…...
图像识别,图片线条检测
import cv2 import numpy as np # 读取图片 img cv2.imread(1.png)# 灰度化 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测 edges cv2.Canny(gray, 100, 200) 当某个像素点的梯度强度低于 threshold1 时,该像素点被认为是非边缘;当梯度强度…...
python crawler web page
npm install or pip install 插件 import json import time from openpyxl import load_workbook from pip._vendor import requests from bs4 import BeautifulSoup import pandas as pd import re import xlsxwriter 設置request header header {user-agent: Mozilla/5.0…...
基于QT实现的TCP连接的网络通信(客户端)
上篇介绍了QT实现网络通信的服务器端,还没看服务器的朋友们先去上篇了解,这篇我来实现一下客户端的实现。 首先还是新建一个项目 选择mainwindow类 在通信前将.pro文件的第一行代码中追加network 窗口搭建 在mainwindow.ui中完成一下窗口的搭建 首先在…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
