echarts里type为custom,自定义配置renderItem为柱状形状

news2025/2/8 9:18:27

echarts里type为custom,自定义配置renderItem为柱状形状

  • echarts里type为custom,自定义配置renderItem为柱状形状

echarts里type为custom,自定义配置renderItem为柱状形状

主要功能:文本超过柱状形状就隐藏否则就显示,移入每一个柱状显示tooltip。

<!DOCTYPE html>
<html lang="">
<head>
    <title>ECharts Custom Render Demo</title>
    <meta charset="utf-8">
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
<div id="myChart" style="width: 600px;height: 400px;"></div>
<script type="text/javascript">
    // 模拟数据--停机数据
    let data0 = [
        {value: ['00:00', '02:30'], status: '停机'},
        {value: ['15:00', '17:30'], status: '停机'},
    ]
    // 模拟数据--生产数据
    let data1 = [
        {value: ['05:00', '12:30'], status: '生产'}
    ]
    // ECharts option 配置项
    let option = {
        dataZoom: {show: true},
        tooltip: {
            trigger: 'item',
            formatter: (params) => {
                return params.data.status;
            },
        },
        legend: {
            data: [
                { name: '停机时长', lineStyle: {color: '#F56464'}, itemStyle: {color: '#F56464'} },
                { name: '生产时长', lineStyle: {color: '#84DFA6'}, itemStyle: {color: '#84DFA6'} },
            ]
        },
        xAxis: {
            type: 'category',
            data: ['00:00', '01:15', '02:30', '03:45', '05:00', '06:15', '07:30', '08:45', '10:00', '11:15', '12:30', '13:45', '15:00', '16:15', '17:30']
        },
        yAxis: {
            type: 'value',
        },
        series: [
            {
                name: '停机时长',
                type: 'custom',
                label: {
                    show: true,
                    position: 'inside',
                    color: '#222',
                    fontSize: 14,
                    lineHeight: 20,
                },
                renderItem: function (params, api) {
                    let dataItem = data0[params.dataIndex];
                    let xStartValue = dataItem.value[0];
                    let xEndValue = dataItem.value[1];
                    let startIndex = option.xAxis.data.findIndex(item => item === xStartValue);
                    let endIndex = option.xAxis.data.findIndex(item => item === xEndValue);
                    let xStart = api.coord([startIndex, 0])[0];
                    let xEnd = api.coord([endIndex, 0])[0];
                    let width = xEnd - xStart;
                    let y = api.coord([0, 0.5])[1];
                    let height = api.size([0, 1])[1];
                    const tempT = '文本内容超过柱状容器就隐藏';
                    const barLength = xEnd - xStart;
                    const flightNumberWidth = echarts.format.getTextRect(tempT).width + 20;
                    const text = barLength > flightNumberWidth ? tempT : '';
                    return {
                        type: 'rect',
                        shape: {
                            x: xStart,
                            y: y - height / 2,
                            width: width,
                            height: height
                        },
                        style: api.style({text: text, fill: '#F56464'}),
                    };
                },
                data: [
                    {value: ['00:00', '02:30'], status: '停机'},
                    {value: ['15:00', '17:30'], status: '停机'},
                ],
            },
            {
                name: '生产时长',
                type: 'custom',
                label: {
                    show: true,
                    position: 'inside',
                    color: '#222',
                    fontSize: 14,
                    lineHeight: 20,
                },
                renderItem: function (params, api) {
                    let dataItem = data1[params.dataIndex];
                    let xStartValue = dataItem.value[0];
                    let xEndValue = dataItem.value[1];
                    let startIndex = option.xAxis.data.findIndex(item => item === xStartValue);
                    let endIndex = option.xAxis.data.findIndex(item => item === xEndValue);
                    let xStart = api.coord([startIndex, 0])[0];
                    let xEnd = api.coord([endIndex, 0])[0];
                    let width = xEnd - xStart;
                    let y = api.coord([0, 0.5])[1];
                    let height = api.size([0, 1])[1];
                    const tempT = '文本内容超过柱状容器就隐藏';
                    const barLength = xEnd - xStart;
                    const flightNumberWidth = echarts.format.getTextRect(tempT).width + 20;
                    const text = barLength > flightNumberWidth ? tempT : '';
                    return {
                        type: 'rect',
                        shape: {
                            x: xStart,
                            y: y - height / 2,
                            width: width,
                            height: height
                        },
                        style: api.style({text: text, fill: '#84DFA6'}),
                    };
                },
                data: [
                    {value: ['05:00', '12:30'], status: '生产'}
                ],
            }
        ]
    };
    // 初始化 ECharts 实例
    let myChart = echarts.init(document.getElementById('myChart'));
    // 将 option 配置项设置到 ECharts 实例中
    myChart.setOption(option);
</script>
</body>
</html>

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

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

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

相关文章

风口上的AIGC,技术人才动不动就年薪百万?

2023年&#xff0c;职场人都在讨论什么&#xff1f; 自今年3月以来&#xff0c;随着ChatGPT应用持续走俏&#xff0c;AIGC领域抢人大战盛况空前。随之而来的便是“AI取代人类”“10亿打工人被革命”&#xff0c;AI的发展速度和步伐&#xff0c;超乎我们预期&#xff0c;也影响…

MySQL - 第0节 - MySQL在Centos 7环境安装

1.安装前说明 • 安装与卸载过程中&#xff0c;用户全部切换成为root&#xff0c;一旦安装&#xff0c;普通用户也能够使用。 • 初期练习&#xff0c;mysql不进行用户管理&#xff0c;全部使用root进行&#xff0c;后面学了用户管理&#xff0c;再考虑新建普通用户。 注&#…

互联网医院资质申请条件|互联网医院申请流程

互联网医院是医疗行业应用互联网技术的一种创新形态&#xff0c;它为患者提供便捷的医疗服务&#xff0c;改善了医疗资源的不足和分散情况。在中国&#xff0c;互联网医院的发展也越来越受到重视&#xff0c;互联网医院牌照的申请流程和需要的资料也成为了关注的焦点。 一、互…

SpringCloud 中各微服务使用 springcloud-config 获取配置文件时,配置信息无法实时刷新

文章目录 1、引入actuator监控2、修改 yml3、添加注解 RefreshScope4、业务操作5、发送通知&#xff0c;即可生效6、思考 使用 springcloud-config 作为 服务配置 管理时&#xff0c; 当对 git 上的配置进行修改后&#xff0c; 各微服务客户端 配置无法 实时刷新&#xff0c;需…

【Flutter】Flutter 切换语言 当前页面不刷新

文章目录 一、前言二、Flutter 多语言支持的基础知识三、如何在 Flutter 中设置语言四、如何在 Flutter 中切换语言五、代码示例六、完整代码七、总结 一、前言 大家好&#xff0c;今天我们要探讨的主题是如何在 Flutter 中切换语言&#xff0c;而不需要刷新当前页面。这是一个…

vue-element-admin - 最新完美解决项目是英文的问题,将英文变成中文的汉化处理详细教程(克隆完项目后不是中文的解决方法)

前言 网上的教程(并且都是好几年前的了)克隆运行后界面文字全都是英文的,如果您想要中文汉语版本请使用本文的方案。 本文 解决了克隆运行 vue-element-admin 项目后,默认是英文的问题!将语言设置为中文的详细教程! 官方文档说的很晦涩,您可以按照本教程步骤进行操作即…

log4j配置说明

目录&#xff1a; 1、 引入jar包使用 2、 使用 3、 配置文件 4、 配置 5、 说明 说明&#xff1a;2015年9月&#xff0c;Apache软件基金业宣布&#xff0c;Log4j不在维护&#xff0c;建议所有相关项目升级到Log4j2。 1.引入jar包使用 <dependency><groupI…

vscode 调试

目录 准备 GDB 调试方法 问题 准备 然后点击 文件-打开文件夹&#xff0c;找到创建的代码路径&#xff0c;确定后&#xff0c;在左侧的资源管理器可以看到代码文件。 第一次运行需要安装 c 的扩展&#xff0c;在扩展页面中&#xff0c;安装 C/C 编译注意一定要加上 -g 指令…

SpringBoot项目配置方式及优先级

说明&#xff1a;SpringBoot支持以下五种方式配置方式&#xff0c;例如将项目的Tomcat端口从8080&#xff0c;更改为9000&#xff0c;可以使用如下方式配置 【方式一】命令行参数 在启动窗口&#xff0c;鼠标右键&#xff0c;选择“Edit Configurations”&#xff0c;在弹出来…

开会糟透了?试试无声会议吧

引言 无声会议(Silent Meeting) 是一种已被成功实践但却鲜有公开资料的开会方法&#xff0c;本文会探寻下它的有趣历史&#xff0c;并介绍如何通过它的小小改变让会议变得不再糟糕。 文档是无声会议的核心基础&#xff0c;本文会引出 Coda 和 Mojidoc(妙记多) 这两款让你的会…

泛微数字化国有资产管理平台,以智能增效能

2021年国务院发布的《行政事业性国有资产管理条例》中要求应当建立健全行政事业性国有资产管理机制&#xff0c;加强对本级行政事业性国有资产的管理。 随着数字化转型的深入&#xff0c;越来越多的行政事业单位、国有企业运用数字化的理念、思路、方法&#xff0c;以智能增效…

AI工具助力创意与写作:19岁小伙每月赚3万,学会这些你也能轻松做到!

导语&#xff1a;在数字时代&#xff0c;人工智能为我们提供了许多创新的工具和资源&#xff0c;助力我们在各个领域实现创意和写作的目标。本文将介绍五款热门的AI工具&#xff1a;Copyai、Flikiai、Notion、TomeAl和Writesonic&#xff0c;它们分别在写作、视频配音、文本编辑…

Java调用Midjourney进行AI画图原生版抓包实现支持中文

用途介绍 Midjourney是一个目前优秀的AI画图工具&#xff0c;不挂梯无法直接访问 本代码主要用于搭建镜像站使用 适合人群 本代码不适合新手&#xff0c;建议使用过okhttp、且具有二开能力的同学使用~ 实现原理 通过调用发送信息接口发送请求&#xff0c;通过轮询房间消息…

【2023最全教程】Web自动化测试怎么做?Web自动化测试的详细流程和步骤

一、什么是web自动化测试 自动化&#xff08;Automation&#xff09;是指机器设备、系统或过程&#xff08;生产、管理过程&#xff09;在没有人或较少人的直接参与下&#xff0c;按照人的要求&#xff0c;经过自动检测、信息处理、分析判断、操纵控制&#xff0c;实现预期的目…

Spring @Autowired注入太坤肋了 我们自己写一个

1、 背景 众所周知该注解是Spring中用于依赖注入的注解&#xff0c;但是该注解只是简单根据类型的注入&#xff0c; 并且如果该类型存在多个实现类的情况下无法抉择具体哪一个实现类就会抛出错误&#xff0c;除非搭配Qualifier注解然后使用硬编码的方式去指定Bean的名字去抉择…

8年测试岗总结,软件测试常见面试题+答案,轻松避坑...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、介绍一下测试流…

JAVA开发与运维(怎么通过docker部署微服务jar包)

目标&#xff1a; 通过docker的方式部署微服务。 一、背景&#xff1a; 我们通过java开发的微服务可以打成jar包&#xff0c;我们可以直接通过裸机部署&#xff0c;也可以通过docker来部署&#xff0c;本文介绍通过docker来部署微服务。 二、首先我们介绍一下docker的发展过程…

Redis高级篇—分布式缓存 持久化 主从 哨兵 分片

分布式缓存 -- 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 0.学习目标 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化 AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&a…

jetBrian_工具的使用

文章目录 Intellij IDEA新建一个IDEA项目新建Project - ClassJDK相关设置out目录和编译版本 详细设置&#xff08;感觉有用的设置&#xff09;打开是否选择项目取消自动更新设置整体主题设置菜单和窗口字体和大小设置IDEA背景图设置编辑器主题样式注释的字体颜色代码智能提示功…

Java面试知识点(全)-分布式微服务-kafka面试知识点

Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 以下是一些Kafka面试题和答案&#xff1a; 文章目录 什么是Kafka&#xff1f;Kafka主题(topic)和分区(partition)有什么作用&#xff1f;Kafka的重复数…