使用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()函…

Python:pip镜像源

pip 镜像文件是将Python包的源代码及其依赖项编译后生成的文件&#xff0c;它包含了Python包的所有功能。通过安装pip镜像文件&#xff0c;您可以在没有互联网连接的环境中快速安装和管理Python包。 以下是在中国大陆使用较快的pip镜像源&#xff1a; 1. 清华大学&#xff1a;…

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…

echart显示单个折线,其他折线隐藏

一开始去官方找文档。以为是series控制的&#xff0c;其实不是。 echart是通过legend控制哪个图显示和隐藏。 代码&#xff1a; legend: {show: true,left: center,selected: {折线1: true,折线2: false,折线3: false,}}, 配合series里面的name属性。控制折线的显示 serie…

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

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

FPGA主芯片选型

硬件资源是器件选型的重要标准。 硬件资源包括逻辑资源、I &#xff0f; O 资源、布线资源、DSP 资源、存储器资源、锁相环资源、串行收发器资源和硬核微处理器资源等。 第一步&#xff1a;选定器件特色&#xff08;重点关注FPGA的专用资源&#xff09; 1、高速BANK的引脚 ①…

Stable Diffusion Automatic1111 Web UI和dreambooth扩展的安装教程

一 下载安装 Python 3.10.x (3.10.6, 3.10.9, 3.10.11) and git Python 3.10.9 > https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exegit > https://git-scm.com/downloads 二 下载安装Automatic1111 Web UI 下载地址&#xff1a;https://github.com/…

聚簇索引与非聚簇索引

聚簇索引与非聚簇索引 聚簇索引和非聚簇索引是数据库中常用的两种索引类型&#xff0c;它们的区别在于索引的顺序是否与数据的物理存储顺序一致。 聚簇索引&#xff1a; 聚簇索引的顺序就是数据的物理存储顺序&#xff0c;因此每张表只能有一个聚簇索引。聚簇索引的优点是查询…

封装校验规则(以及复选框和整体校验)-----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;我们需要探讨这…

安卓发布小技巧

多个版本 apk多版本共存 如果是git多个分支&#xff0c;可只修改build.gradle里的applicationId。 SDK升级后缩包 Android M 的 NDK 行为变更对 APK 包体积的影响 安卓车载 Android车载开发与设备调试学习手册 tobecontinue…

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;也方便随时修改数据结构…