使用Echarts.js绘制环形图(指定触发高亮事件)

一、页面效果
默认tab为不限,正常渲染所有数据:

在这里插入图片描述

数据图形hover时,弹框展示相关信息:

在这里插入图片描述

切换tab时,高亮放大突出对应数据项的图形区域,并降低其他图形区域的透明度:

在这里插入图片描述

二、功能描述

1、tab选中不限时,环形图表中正常渲染环形图,以及对应的数据类型图例和指示文字。

2、环形图hover时,高亮hover所在的图形区域,图形区域放大,并悬浮弹窗展示相关数据。

3、在切换tab时,选中指定tab,则环形图中的对应数据图形进行高亮显示,图形区域放大,指示文字和指示线加粗处理。其余数据图形区域透明度降低处理。

4、指定图形标题和图形区域颜色。

5、设置图形最小占有区域。

*注意:

​ 1、当前案例是在Vue2中使用,echarts.js版本为5.3.2

三、具体代码

html结构:
<!-- 准备渲染echarts的画布 -->
<div id="pie"></div><script>
// 引入echarts依赖
import * as echarts from "echarts";
// 声明渲染数据
info: {PC: 2665,H5: 112,APP: 0,
},
// 声明数据对应颜色
colors: {PC: "red",H5: "blue",APP: "green",
},
// 当前的渠道
channel: 0, // 0-不限 1-PC 2-H5 3-APP
// 当前渠道名称
channelName: ''
</script><style>
#pie {height: 300px; /* 指定画布高度 */
}
</style>
js渲染逻辑:
showData() {// 判断是否已经存在实例 避免重复注册let myChart2 = echarts.getInstanceByDom(document.getElementById("pie"));if (!myChart2) {myChart2 = echarts.init(document.getElementById("pie"));}// 定义配置项let option2 = {title: {text: "环形图表", // 定义图表标题left: "5%", // 定义图表标题的位置},tooltip: {trigger: "item", // 定义触发类型},legend: {// 底部图例说明bottom: 0, // 图例位置left: "center", // 图例位置data: Object.keys(this.info), // 图例信息数据},series: [{type: "pie", // 图表类型为饼图radius: ["45%", "70%"], // 饼图的内外半径 决定环形大小minAngle: 5, // 数据项占有的最小角度 用于防止数据项太少时出现数据标签重叠emphasis: {// 鼠标hover的高亮样式scale: true, // 是否开启高亮放大效果scaleSize: 10, // 放大尺寸},// 图表渲染数据项data: [{value: this.info.PC, // 数据值name: `PC`, // 数据名 与图例信息对应// 定义指示标签文字样式label: {formatter: "{b} {d}%", // 文字内容 {a}:系列名 {b}:数据名 {c}:数据值 {d}:百分比。color: "#333", // 字体颜色fontSize: this.channel === 1 ? 14 : 12, // 根据tab选中项决定字体大小fontWeight: this.channel === 1 ? "bold" : "normal", // 根据tab选中项决定字体粗细},// 定义指示标签引导线样式labelLine: {lineStyle: {width: this.channel === 1 ? 2 : 1, // 根据tab选中项决定引导线宽度},},// 定义数据图形样式itemStyle: {color: this.colors["PC"], // 决定数据图形颜色opacity:this.channel === 1 || this.channel === 0 ? 1 : 0.4, // 根据tab选中项决定数据图形透明度},},{value: this.info.H5,name: "H5",label: {formatter: "{b} {d}%",color: "#333",fontSize: this.channel === 2 ? 14 : 12,fontWeight: this.channel === 2 ? "bold" : "normal",},labelLine: {lineStyle: {width: this.channel === 2 ? 2 : 1,},},itemStyle: {color: this.colors["H5"],opacity:this.channel === 2 || this.channel === 0 ? 1 : 0.4,},},{value: this.info.APP,name: "APP",label: {formatter: "{b} {d}%",color: "#333",fontSize: this.channel === 3 ? 14 : 12,fontWeight: this.channel === 3 ? "bold" : "normal",},labelLine: {lineStyle: {width: this.channel === 3 ? 2 : 1,},},itemStyle: {color: this.colors["APP"],opacity:this.channel === 3 || this.channel === 0 ? 1 : 0.4,},},],},],};// 第二个参数默认为 false 即表示合并新旧option 可能会出现某类数据被删除 但对应数据折线依旧存在的问题// 设置为 true,表示内部所有组件都会被删除,然后根据新 option 创建所有新组件。option2 && myChart2.setOption(option2, true);// 判断选中的是不是不限if (this.channel !== 0) {// 取消之前指定的高亮图形区域myChart2.dispatchAction({type: "downplay", // 触发的事件类型 downplay-取消高亮});// 重新设置高亮图形区域myChart2.dispatchAction({type: "highlight", // 触发的事件类型 highlight-指定高亮// 用 name 来指定高亮数据项-与data中定义的name属性相同。name: this.channelName,});} else {// 如果选中的是不限 取消指定的高亮区域myChart2.dispatchAction({type: "downplay", // 触发的事件类型 downplay-取消高亮});}
}
js调用逻辑:
// 从接口获取图表数据res后 保存数据
this.info.PC = res.PC;
this.info.H5 = res.H5;
this.info.APP = res.APP;
// 调用渲染函数
this.showData();// .....// 或者切换tab后
this.channel = 1;
this.channelName = 'PC'
// 调用渲染函数
this.showData();

四、高亮事件配置项

// 如果要高亮系列:
dispatchAction({type: 'highlight',// 用 index 或 id 或 name 来指定系列。// 可以使用数组指定多个系列。seriesIndex?: number | number[],seriesId?: string | string[],seriesName?: string | string[],// 数据项的 index,如果不指定也可以通过 name 属性根据名称指定数据项dataIndex?: number | number[],// 可选,数据项名称,在有 dataIndex 的时候忽略name?: string | string[],
});// 如果要高亮 geo 组件(从 `v5.1.0` 开始支持):
dispatchAction({type: 'highlight',// 用 index 或 id 或 name 来指定 geo 组件。// 可以用数组指定多个 geo 组件。geoIndex?: number | number[],geoId?: string | string[],geoName?: string | string[],// geo 组件中 region 名称。// 可以是一个数组指定多个名称。name?: string | string[],
取消高亮配置项
// 如果要取消高亮系列:
dispatchAction({type: 'downplay',// 用 index 或 id 或 name 来指定系列。// 可以使用数组指定多个系列。seriesIndex?: number | number[],seriesId?: string | string[],seriesName?: string | string[],// 数据项的 index,如果不指定也可以通过 name 属性根据名称指定数据项dataIndex?: number | number[],// 可选,数据项名称,在有 dataIndex 的时候忽略name?: string | string[],
})// 如果要取消高亮 geo 组件(从 `v5.1.0` 开始支持):
dispatchAction({type: 'downplay',// 用 index 或 id 或 name 来指定 geo 组件。// 可以用数组指定多个 geo 组件。geoIndex?: number | number[],geoId?: string | string[],geoName?: string | string[],// geo 组件中 region 名称。// 可以是一个数组指定多个名称。name?: string | string[],
});

五、参考文档

Echarts文档

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

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

相关文章

2024年江苏省职业院校技能大赛 信息安全管理与评估 第二阶段教师组 (样卷)

2024年江苏省职业院校技能大赛 信息安全管理与评估 第二阶段教师组 (样卷) 项目竞赛样题 本文件为信息安全管理与评估项目竞赛-第二阶段样题&#xff0c;内容包括&#xff1a;网络安全事件响应、数字取证调查、应用程序安全。 本次比赛时间为180分钟。 介绍 GeekSec专注技能竞…

fastapi.templating与HTMLResponse

要声明一个模板对象&#xff0c;应将存储html模板的文件夹作为参数提供。在当前工作目录中&#xff0c;我们将创建一个 “templates “目录。 templates Jinja2Templates(directory“templates”) 我们现在要把这个页面的HTML代码渲染成HTMLResponse。让我们修改一下hello()函…

Linux 存储管理

内容概述 磁盘结构分区类型管理分区管理文件系统挂载设备管理swap空间&#xff08;用来缓解内存空间不足情况&#xff09;RAID 管理LVM管理LVM快照 1 磁盘结构 1.1 设备文件 块设备文件&#xff1a;数据的访问单位是块Block&#xff0c;一个块的IO 字符设备文件&#xff1a…

台灯应该买什么样的才能护眼?学生护眼必备护眼台灯推荐

10月26日&#xff0c;教育部召开新闻发布会&#xff0c;介绍综合防控儿童青少年近视工作情况。全国综合防控儿童青少年近视工作联席会议机制办公室主任、教育部体育卫生与艺术教育司司长王登峰介绍&#xff0c;2018年全国儿童青少年的总体近视率53.6%&#xff0c;2019年总体近视…

OpenAI王座的有力竞争者:Google 发布最强 AI 大模型 Gemini,能力超过GPT-4!

当地时间 12 月 6 日&#xff0c;Google CEO 桑达尔・皮查伊&#xff08;Sundar Pichai&#xff09;官宣 Gemini 1.0 版正式上线。据介绍&#xff0c;这是 AI 模型的巨大飞跃&#xff0c;最终将影响几乎所有的 Google 产品。 Gemini 大模型包括三种量级&#xff1a;能力最强的 …

【LeetCode】2621. 睡眠函数

睡眠函数 Promise异步 题目题解 题目 请你编写一个异步函数&#xff0c;它接收一个正整数参数 millis &#xff0c;并休眠 millis 毫秒。要求此函数可以解析任何值。 示例 1&#xff1a; 输入&#xff1a;millis 100 输出&#xff1a;100 解释&#xff1a; 在 100ms 后此异步…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

Python---面向对象的综合案例

案例1&#xff1a;定义学员信息类&#xff0c;包含姓名、成绩属性&#xff0c;定义成绩打印方法&#xff08;90分及以上显示优秀&#xff0c;80分及以上显示良好&#xff0c;70分及以上显示中等&#xff0c;60分及以上显示合格&#xff0c;60分以下显示不及格&#xff09; 学员…

封装校验规则(以及复选框和整体校验)-----Vue3+ts项目

登录校验页面 <script setup lang"ts"> import { ref } from vue import { mobileRules, passwordRules } from /utils/rules const mobile ref() const password ref() </script><!-- 表单 --><van-form autocomplete"off">&l…

2021年第十届数学建模国际赛小美赛A题气道阻力的评估解题全过程文档及程序

2021年第十届数学建模国际赛小美赛 A题 气道阻力的评估 原题再现&#xff1a; 气道阻力的定义是通过肺气道产生单位气流所需的经肺压力的变化。更简单地说&#xff0c;它是嘴和肺泡之间的压力差&#xff0c;除以气流。影响气道阻力的因素是多方面的&#xff0c;我们需要探讨这…

imutils库介绍及安装学习

目录 介绍 本机环境 安装 常用函数 使用方法 图像平移 图像缩放 图像旋转 骨架提取 通道转换 OPenCV版本的检测 综合测试 目录 介绍 本机环境 安装 常用函数 使用方法 图像平移 图像缩放 图像旋转 骨架提取 通道转换 OPenCV版本的检测 介绍 imutils 是一…

目标检测综述(待补ing)

文章目录 摘要引言目标检测发展历程目标检测路线图传统检测器基于CNN的两阶段检测器基于CNN的一阶段检测器 目标检测数据集及指标数据集评价指标标注软件 backboneAlexNet&#xff08;2012&#xff09;VGGNet&#xff08;2014&#xff09;GoogleNet&#xff08;2014&#xff09…

如何统计12.5米高程覆盖率?

无论是卫星影像还是高程DEM数据&#xff0c;覆盖率都是大家非常关心的一个重要参数。 我们曾基于WGS84坐标进行过简单的覆盖率计算&#xff0c;而且面积还包括了海洋区域。 因此&#xff0c;最后得出了一个非常不靠谱&#xff0c;看起来也很不漂亮的数据&#xff1a;12%。 为…

Mysql主从集群搭建——基于docker-compose一键部署

搭建初衷 本身自己就是开发这类应用的工作者&#xff0c;一个私有库还是很有必要的。无论是公司项目还是私人项目都可以用到&#xff0c;不用担心忘记同步导致的数据丢失统一管理所有docker应用的数据&#xff08;如果容器可以连接mysql的话&#xff09;也方便随时修改数据结构…

Python实现广义线性回归模型(statsmodels GLM算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义线性模型(Generalized Linear Model&#xff0c;简称GLM)是一种广泛应用于回归分析和分类问题的统…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-4线性时不变系统中的冲激响应与卷积

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-数学基础Ch0-4线性时不变系统中的冲激响应与卷积 1. LIT System&#xff1a;Linear Time Invariant2. 卷积 Convolution3. 单位冲激 Unit Impulse——Dirac Delta 线性时不变系统 &#xff1a; L…

Science | 张锋实验室:聚类算法揭示188种新型CRISPR系统

微生物序列数据库包含大量有关酶和其他可用于生物技术的分子的信息。但近年来&#xff0c;这些数据库已经变得非常庞大&#xff0c;以至于很难有效地搜索到感兴趣的酶。 2023年11月23日&#xff0c;博德研究所张锋及美国国立卫生研究院Eugene V. Koonin共同通讯在Science 在线…

软件测试外包干了2个月,技术进步2年。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;18年通过校招进入北京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

01_W5500简介

目录 W5500简介&#xff1a; 芯片特点: 全硬件TCPIP协议栈: 引脚分布&#xff1a; W5500简介&#xff1a; W5500是一款高性价比的以太网芯片&#xff0c;其全球独一无二的全硬件TCPIP协议栈专利技术&#xff0c;解决了嵌入式以太网的接入问题&#xff0c;简单易用&#xff…

学习Python的未来前景分析

文章目录 前言学python可以干什么如果具备Python编程&#xff0c;能用Python做什么&#xff1a;学Python语言能干什么1.常规软件开发2.科学计算3.自动化运维4.云计算 学python编程对未来的影响关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Py…