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

news2024/12/24 22:14:36

效果图

在这里插入图片描述
主要注意点:
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'
                                }
                            }
                        }
                    ]
                }
            ]
        }

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

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

相关文章

程序员如何平衡日常编码工作与提升式学习?

程序员的两难&#xff1a;如何平衡日常编码与持续学习 在科技日新月异、更新迭代迅速的编程世界中&#xff0c;程序员面临的一个重要挑战是如何在繁忙的日常编码工作和持续的专业提升之间找到平衡。是否应当在工作时间全身心投入到项目推进中&#xff0c;还是应该抽出时间学习…

第38篇 冒泡排序<二>

Q&#xff1a;如何设计C语言程序对数组进行降序排列&#xff1f; A&#xff1a;基本原理&#xff1a;通过不断的比较和交换数组中的数据元素&#xff0c;最终使得最大的数据“冒泡”排到到数组最末&#xff0c;并逐步缩小待排序的范围直到所有数据都排列正确位置。首先定义简单…

行业大模型:信用评分大模型、生产优化大模型、库存管理大模型、物流行业大模型、零售行业大模型

金融行业大模型&#xff1a;信用评分大模型 信用评分模型在金融行业中扮演着至关重要的角色&#xff0c;它通过对个人或企业的信用状况进行评估&#xff0c;帮助金融机构有效控制风险&#xff0c;提高业务效率。以下是信用评分模型的特点及案例介绍&#xff1a; 信用评分模型…

git放弃本地add/commit

git放弃本地add/commit 还未添加add的情况已经执行git add缓存了的&#xff1a;可以用命令 还未添加add的情况 # 放弃某个文件git checkout <filename># 放弃所有文件git checkout .已经执行git add缓存了的&#xff1a;可以用命令 git reset HEAD filepathname &#x…

【开端】如何高效记录并整理编程学习笔记

如何高效记录并整理编程学习笔记&#xff1f; 在编程学习的海洋中&#xff0c;高效的笔记记录和整理方法就像一张珍贵的航海图&#xff0c;能够帮助我们在浩瀚的知识中找到方向。如何建立一个既能快速记录又易于回顾的笔记系统&#xff1f;如何在繁忙的学习中保持笔记的条理性…

巴黎奥运会中国奖牌数据分析

目录 一、每个比赛日奖牌变化数据分析 二、奖牌项目占比数据分析 2.1金牌中项目占比分析 2.2 银牌中项目占比分析 2.3 铜牌中项目占比分析 2.4 奖牌总数中项目占比分析 在巴黎奥运会上&#xff0c;中国队的表现可谓亮眼&#xff0c;各项比赛日的奖牌总数和不同项目的奖牌…

【软件测试】功能测试理论基础

目录 项目的测试流程&#x1f3f4; 需求评审 评审形式 测试人员在需求评审中职责 测试计划与方案 测试计划 问题 测试方案&#x1f3f4; 测试计划与方案的对比 功能测试设计&#x1f3f4; 测试设计的步骤 项目的测试流程&#x1f3f4; 作用&#xff1a; 有序有效开展…

js 深拷贝、浅拷贝深度解析

赋值操作&#xff1a; let obj{a:1,b:[1,2,3],c:{m:2}}let newObjobjnewObj.a2newObj.b.push(4)newObj.c.m3console.log(obj,newObj); 将一个对象赋值给一个变量&#xff0c;其实就是将这个对象在栈内存中的引用地址复制给了这个变量&#xff0c;这两个对象指向堆内存中的同一个…

基于SpringBoot+Vue的产业园区智慧公寓管理系统(带1w+文档)

基于SpringBootVue的产业园区智慧公寓管理系统(带1w文档) 基于SpringBootVue的产业园区智慧公寓管理系统(带1w文档) 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包…

Multisim 用LM358 运放模拟线性稳压器 - 运放输出饱和 - 前馈电容

就是拿运放搭一个可调的LDO 稳压器&#xff0c;类似下面这个功能框图里的感觉。本来应该非常简单&#xff0c;没什么好说的&#xff0c;没想到遇到了两个问题。 原理 - 理想运放 我用PNP 三极管Q2 作为输出&#xff0c;运放输出电压升高时&#xff0c;流过PNP 三极管BE 的电流变…

【proteus经典实战】报警器与旋转灯

一、简介 报警器与旋转灯项目是一个典型的嵌入式系统应用&#xff0c;它结合了声音报警和视觉指示功能&#xff0c;广泛应用于安全监控、紧急疏散、交通信号和娱乐设备等多种场景。基于51单片机提供一种集成的声音和视觉报警解决方案&#xff0c;通过声音和灯光的结合&#xff…

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 底半部实现机制之软…

微信会员卡怎么做_便捷生活新风尚

在这个快节奏的时代&#xff0c;每一次消费不仅是简单的商品交换&#xff0c;更是一场关于个性、便捷与尊享的深刻体验。随着数字化浪潮的汹涌澎湃&#xff0c;微信会员卡应运而生&#xff0c;它以独特的魅力&#xff0c;重新定义了商家与顾客之间的关系&#xff0c;开启了一场…

网鼎杯-2018-Web-Unfinish

先尝试万能注入&#xff1a; 如果万能注入缺少符号&#xff0c;如果加符又进不去&#xff0c;那我们尝试扫描文件,然后发现有一个register.php的文件&#xff0c;应该是注册页面&#xff0c;我们去打开 知道存储的文件&#xff0c;并利用状态码进行过滤 我们注册的用户名就是aa…

鼠害监测系统:科技守护农业安全

在农业生产中&#xff0c;鼠害一直是威胁作物安全、影响产量的重要因素。然而&#xff0c;随着科技的飞速发展&#xff0c;鼠害监测系统正逐步成为现代农业防治鼠害的重要利器。 鼠害监测系统巧妙融合了现代光电、数控及物联网技术&#xff0c;实现了诱鼠、投喂鼠药、鼠情监测及…

RoBERTa-www-ext 解读及使用方法

背景&#xff1a;模型及名字 hfl/chinese-roberta-wwm-ext 是 Hugging Face 提供的一个中文预训练模型&#xff0c;它是 RoBERTa 的一个变种&#xff0c;特别针对中文进行了优化。这个模型的名称中的“wwm”代表“word-level whole word masking”&#xff0c;意味着在预训练过…

爬虫案例3——爬取彩票双色球数据

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 任务&#xff1a;从500彩票网中爬取双色球数据 目标网页地址&#xff1a;https://datachart.500.com/ssq/ 一、思路和过程 目标网页具体内容如下&#xff1a; ​​​​​ 我们的任务是将上图中…

数学建模——启发式算法(蚁群算法)

算法原理 蚁群算法来自于蚂蚁寻找食物过程中发现路径的行为。蚂蚁并没有视觉却可以寻找到食物&#xff0c;这得益于蚂蚁分泌的信息素&#xff0c;蚂蚁之间相互独立&#xff0c;彼此之间通过信息素进行交流&#xff0c; 从而实现群体行为。 蚁群算法的基本原理就是蚂蚁觅食的过程…

一套完整的NVR方案与部分NVR录像机GUI源码剖析

一、部分功能展示 1.1 通道管理部分 在NVR系统中&#xff0c;通道管理是核心功能之一。通过通道管理&#xff0c;用户可以对连接的摄像头进行配置和监控。 通道连接使能&#xff1a;用户可以选择开启或关闭特定通道的连接功能&#xff0c;以实现灵活的设备管理。 时间同步&…

Aigtek高压功率放大器指标参数是什么

高压功率放大器是一种用于将电信号放大到较高电压水平的设备。其指标参数对于选择、设计和应用都至关重要。以下是一些常见的高压功率放大器指标参数&#xff0c;详细了解这些参数可以帮助工程师更好地了解设备的性能和适用范围。 电压增益&#xff1a; 电压增益是功率放大器输…