echarts 旭日图 层级嵌套

2024-04-01 20:52
文章标签 层级 嵌套 echarts 旭日

本文主要是介绍echarts 旭日图 层级嵌套,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基础的可以直接参考官网进行配置。

Echarts旭日图的特点如下:

1 层次结构展示:旭日图适用于展示层次结构数据,通过不同的扇形区域来表示不同层次的数据。每个扇形区域的大小和位置表示了数据的大小和层次关系。

2 渐进式呈现:旭日图支持渐进式呈现,可以通过交互操作逐步展开或收缩各个层次结构,使得用户可以更加深入地了解数据的细节。

3 编码多个维度:旭日图可以编码多个维度的数据,通过扇形区域的颜色、半径或角度来表示数据的不同维度。这样可以在一个图表中同时展示多个维度的数据,方便进行数据的对比和分析。

4 交互操作丰富:Echarts旭日图支持选中、高亮、点击事件等交互操作,用户可以与旭日图进行交互,进行数据的筛选和查看。例如,可以通过点击某个扇形区域来展开或收缩该层次的子层次数据。

5 兼容性强:Echarts旭日图能够兼容主流的浏览器,并且提供了响应式布局的功能,可以自适应不同的屏幕尺寸。

6 可扩展性好:Echarts提供了丰富的扩展插件和主题,用户可以根据需求自定义图表的功能和外观。同时,Echarts还支持与其他前端框架(如Vue、React)的集成,方便开发者更好地使用和扩展

在这里插入图片描述

总觉得旭日图加引导线很丑就去掉了。因为旭日图的内容比较多,本身就占据了很多的高度和内容。
在这里插入图片描述

实际项目中,我们发现官网提供的只是基础内容,有的功能我们用不到,例如官网提供的旭日图,点击了某个区域就会进行扩展, 中心没有数据, 文本超出省略配置,以及引导线配置 等

( nodeClick  阻止扩展收缩功能),中心没有数据(可以进行 graphic 配置),
配置引导线(labelLine 配置 )--- 只不过引导线会很丑,且没有环形图好看,这里配置了但是注释了,查了一下,旭日图好像没有特定引导线,都是自己去画的但是很丑。文本超出省略配置 
label: {overflow: 'truncate', // 设置文本超出时显示省略号truncate: {maxWidth: 50 // 设置最大宽度为50px}
}  

改造如下。
直接上数据了。

// 质量位置数据结构, 和后端定义好,直接就能用
export const QUALITY_POSITION = [
//  问题总数 issueTotal
// (2)图形外透:name+  questionNum
// (3)鼠标悬停时气泡显示: name , questionNum , ratio {ratio: 4.5,questionNum: 6.5,position0: 1,name: 'BOM结构类',children: [{ratio: 4,questionNum: 5,position0: 1,position1: 101,name: '搭错物料结构'},{ratio: 5,questionNum: 6,position0: 1,position1: 102,name: '组件漏投'}]},{ratio: 4,questionNum: 5,position0: 2,name: '结构件类',children: [{ratio: 4,questionNum: 5,position0: 2,position1: 201,name: '底座'},{ratio: 4,questionNum: 5,position0: 2,position1: 202,name: '顶梁'},{ratio: 4,questionNum: 5,position0: 2,position1: 203,name: '顶梁侧护板'},{ratio: 4,questionNum: 5,position0: 2,position1: 204,name: '顶梁前部'},{ratio: 4,questionNum: 5,position0: 2,position1: 205,name: '后连杆'},{ratio: 4,questionNum: 5,position0: 2,position1: 206,name: '脚踏板'},{ratio: 4,questionNum: 5,position0: 2,position1: 207,name: '前梁'},{ratio: 4,questionNum: 5,position0: 2,position1: 208,name: '上连杆'},{ratio: 4,questionNum: 5,position0: 2,position1: 209,name: '伸缩梁'},{ratio: 4,questionNum: 5,position0: 2,position1: 210,name: '推杆'},{ratio: 4,questionNum: 5,position0: 2,position1: 211,name: '尾梁'},{ratio: 4,questionNum: 5,position0: 2,position1: 212,name: '巷道支架摆杆&底座&顶梁&掩护梁'},{ratio: 4,questionNum: 5,position0: 2,position1: 213,name: '掩护梁'},{ratio: 4,questionNum: 5,position0: 2,position1: 214,name: '工作面挡风挡矸'}]},{ratio: 4.5,questionNum: 6.5,position0: 3,name: '液压系统类',children: [{ratio: 4,questionNum: 5,position0: 3,position1: 301,name: 'U型卡不露头'},{ratio: 4,questionNum: 5,position0: 3,position1: 302,name: '标牌错误'},{ratio: 4,questionNum: 5,position0: 3,position1: 303,name: '布置位置不合适'},{ratio: 4,questionNum: 5,position0: 3,position1: 304,name: '阀板干涉'},{ratio: 4,questionNum: 5,position0: 3,position1: 305,name: '功能缺失'},{ratio: 4,questionNum: 5,position0: 3,position1: 306,name: '胶管连接不合适'},{ratio: 4,questionNum: 5,position0: 3,position1: 307,name: '接口尺寸错误'},{ratio: 4,questionNum: 5,position0: 3,position1: 308,name: '连接尺寸错误'},{ratio: 4,questionNum: 5,position0: 3,position1: 309,name: '漏连接件'}]},{ratio: 4.5,questionNum: 6.5,position0: 4,name: '油缸类',children: [{ratio: 4,questionNum: 5,position0: 4,position1: 401,name: '标牌信息错误'},{ratio: 4,questionNum: 5,position0: 4,position1: 402,name: '参数错误'},{ratio: 4,questionNum: 5,position0: 4,position1: 403,name: '尺寸错误'},{ratio: 4,questionNum: 5,position0: 4,position1: 404,name: '防尘圈问题'},{ratio: 4,questionNum: 5,position0: 4,position1: 405,name: '接口尺寸错误'}]},{ratio: 4.5,questionNum: 6.5,position0: 5,name: '直属件类',children: [{ratio: 4,questionNum: 5,position0: 5,position1: 501,name: '挡块问题'},{ratio: 4,questionNum: 5,position0: 5,position1: 502,name: '销轴问题'}]},{ratio: 4.5,questionNum: 6.5,position0: 6,name: '总体类',children: [{ratio: 4,questionNum: 5,position0: 6,position1: 601,name: '漏投零件'},{ratio: 4,questionNum: 5,position0: 6,position1: 602,name: '运动干涉'}]}
]export const echartsOption = (data: Array<object>, issueTotal: number) => {let option = {}let seriesData: any = []data = QUALITY_POSITIONdata.forEach((ma: any, index) => {let a = JSON.parse(JSON.stringify(ma?.children).replace(/questionNum/g, 'value').replace(/name/g, 'name').replace(/ratio/g, 'radio'));seriesData.push({position0: ma?.position0,name: ma?.name,radio: ma?.ratio, // 占比realvalue: ma?.questionNum, // 数量children: a // ma?.children});});if (seriesData && seriesData.length > 0) {option = {// 提示器tooltip: {show: 'true',trigger: 'item',axisPointer: {type: 'shadow'},// (2)图形外透:分类名称+问题数量// (3)鼠标悬停时气泡显示:分类名称、问题数量、占比formatter: function (params: any) {// console.log(params, 'params---params');// 分类名称 数量 占比const htmlTooltip = '分类名称:' + params.data.name + '<br/>' + '数量:' + params.data.value+'<br/>'+ '占比:' + params.data.radio + '%'return htmlTooltip}},graphic: [{type: 'text',//控制内容为文本文字left: "center",top: "46%",//调整距离盒子高处的位置style: {fill: '#3076FE',//控制字体颜色text: `${issueTotal}个`,//控制第一行字显示内容fontSize: '32px',lineHeight: 0,}}, {type: 'text',left: "center",top: "53%",z: 10,style: {text: '问题总数',fontSize: '14px',lineHeight: 14,fill: '#262626',}}],series: [{type: 'sunburst',data: seriesData,// data: data,nodeClick: function (params: any) {// 阻止点击事件向下传播  禁用整体的展开折叠功能return false;},radius: [0, '100%'],bottom: 20,emphasis: {focus: 'ancestor', // 祖先// itemStyle: {//   shadowBlur: 10,//   shadowOffsetX: 0,//   shadowColor: 'rgba(0, 0, 0, 0.5)'// }},label: {overflow: 'truncate', // 设置文本超出时显示省略号truncate: {maxWidth: 50 // 设置最大宽度为50px}},levels: [{},{r0: '20%',r: '49%',label: {width: 64,// rotate: 'tangential',align: 'center',// formatter: ['{b|{b}}', '{c|{c}}'].join('\n'), // 分类名称+问题数量// rich: {//   c: {//     color: 'inherit', // #fff//     lineHeight: 5,//     fontSize: 12,//   },//   b: {//     color: 'inherit', // 继承//     height: 20,//     fontSize: 12,//   }// }formatter: function (params:any) {// console.log(params, 'paramparamparamparam----')// let depth = params.treePathInfo.length// console.log(depth, 'depthdepth');if (params.data.value) {return (`${params.data.name}(${params.data.realvalue})`)}},fontSize: 12,color: '#000'},},{r0: '50%',r: '68%', label: {width: 74,position: 'outside',padding: 33,silent: false,show: true,// rotate: 0,color: 'inherit', // 继承颜色// // 分类名称+问题数量formatter: function (params:any) {// console.log(params, '0000000');return (`${params.data.name}(${params.data.value})\n${params.data.radio}%`)},// formatter: ['{b|{b}}({a})}', '{c|{c}}%'].join('\n'),// rich: {//   a: {//     color: 'inherit',//     align: 'left',//     fontSize: 15,//     // padding: [0, 0]//   },//   b: {//     color: 'inherit',//     fontSize: 15,//     // padding: [3,3]//     // lineHeight: 33//   },//   per: {//     color: 'inherit',//     fontSize: 15,//   }// }},// labelLine: {// 显示刻度线条//   show: true, // 显示引导线//   length: 10, // 引导线的长度//   length2: 20, // 引导线与终点的长度//   useSymbol: true, // 使用标记来表示引导线终点//   symbolSize: 8, // 标记的大小//   lineStyle: { // 引导线的样式//     color: 'rgba(255, 0, 0, 0.5)',//     width: 1//   },//   smooth: 0.8, // 引导线弯曲// },}]}]}} else {option = {title: {left: 'center',top: 'center',fontSize: 20,subtext: '暂无数据'}}}return option
}

剩下的就是在你的页面中接口调用赋值,然后引用上方的 方法,传值就可以显示了。
在这里插入图片描述
onMounted 钩子函数 然后如上图就OK了,需要什么事件操作,去获取 这个echarts的dom 就可以了

这篇关于echarts 旭日图 层级嵌套的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868119

相关文章

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

多个,多层嵌套module,打aar包

参考https://blog.51cto.com/4259297/1699714 1.在要打包的module中下添加fat-aar.gradle文件。(该文件只能在项目个gradle是2.3.3是才可食用) 2.把项目的gradle修改为2.3.3,但是不打包的gradle依然是以前的。 3.由于打包的的gradle和不打包的是不一样的,所以需要在修改gradle的文件中的添加判断标志

Android studio jar包多层嵌套,Add library '__local_aars__:...@jar' to classpath问题

在添加jar包,早app下的build.gradle中的 implementation files('libs/jar包的名字.jar') 修改为 api files('libs/jar包的名字.jar') implementation 单层引用,只引用当前jar包层, api 多层引用,应用当前jar包层,已经jar包引用的jar包层

vue el-dialog嵌套解决无法点击问题

产生原因: 当你在 el-dialog 上嵌套另一个 el-dialog 窗口时,可能会遇到内部对话框无法点击的问题。这通常是由于嵌套对话框的遮罩层(overlay)或其他样式问题造成的。 解决方案: 如果你的 el-dialog 组件支持 append-to-body 属性,你可以将对话框附加到 body 元素上,以避免 z-index 问题。 <template><el-dialo

Echarts使用笔记--饼图,柱状图

开始做前端了,感觉自己是要变成全栈工程师了。。。 今天使用了echart,用之前觉得好高大上好厉害,肯定很复杂。用了以后才发现,使用起来超简单,当然,精通很难,里面的各种配置太多了,本文记录一下自己用到的东西。 echart使用 现在直接引用js文件就可以了 <script src="echarts.min.js"></script> echart组件需要在一个宽高固定的DOM里才能显示

【python web】Flask+Echarts 实现动图图表

flask 是python web开发的微框架,Echarts酷炫的功能主要是javascript起作用,将两者结合起来,发挥的作用更大。下面将Echarts嵌套进Flask的html模板中。 项目结构: 打开demo.py运行,点击console中的链接http://127.0.0.1:5000/ 就可以看到我们想要的动态图表。 demo.py #coding:utf-8fro

14,子查询语句嵌套

1.1 查询研发部门的所有员工信息 #步骤1: 查询研发部门的 did SELECT did FROM t_department WHERE dname = '研发部'; #步骤2: 嵌套子查询,查询员工信息 SELECT * FROM t_employee WHERE did = (SELECT did FROM t_department WHERE dname = '研发部');

NYOJ 16 矩形嵌套

OJ题目 : http://acm.nyist.net/JudgeOnline/problem.php?pid=16 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除

if语句:嵌套if

在if else语句中,else可以与另一个if语句连用,构成多层判断。 比如:要求输入一个整数,判断输入的整数是0,还是正数或负数。请看如下代码: #include <stdio.h>int main(){int num=0;scanf("%d",&num);if(num==0)printf("输入的数字是0\n");else if(num>0)printf("是正数\n")