用Echarts制作多段圆环图的过程及优化
Admin 2022-11-15 群英技术资讯 531 次浏览
第一眼看的时候以为用echarts里的饼图做一些修改可以达到,但是效果都不太好,首先是每段弧段的边缘有一个圆角的处理,其次是弧度的宽度是不同,灰色最细,红色次之,绿色是最宽的.
第二时间又看到了一些圆环进度条的示例
本来以为这种图应该可以实现了,但去看了示例的代码发现这种图是echarts里的pie组件的一个叠加,一般叠加一次,有两个区域效果还算可以,但是3个区域的效果在不设置圆弧的宽度时还算可以接受,但是设置了宽度后总会有一些叠加后超出不太美观的问题.
最终在玫瑰图的网站上找到一个比较复杂的实现,通过修改各项配置基本完美的使用ehcarts实现了这个图形. 首先是echarts的一个option的配置代码,为了方便将series与option做了一个分离
const colorDataHandle = (data, total, width = 375) => { let num = 0 let option = { angleAxis: { axisLine: { show: false, }, axisLabel: { show: false, }, splitLine: { show: false, }, axisTick: { show: false, }, min: 'dataMin', max: 'dataMax', startAngle: 135, }, radiusAxis: { type: 'category', axisLine: { show: false, }, axisTick: { show: false, }, axisLabel: { show: false, }, }, polar: { radius: '95%' }, series: [] } // option是对传入的数据的一个处理 const options = data.map((item, index) => { num += item const a = { type: 'bar', data: [0, 0, 0, num], coordinateSystem: 'polar', z: 9999 - index, roundCap: true, color: colors[index], barGap: '-100%', // barWidth: '30%', itemStyle: { // 控制弧的宽,弧的宽的控制并没有做太多的情况判断,简单的区分了一下 borderWidth: index === 0 ? 4 : index === 1 ? 2 : 0, // shadowBlur: 5, // color: 'transparent', borderColor: colors[index], shadowColor: colors[index], }, } return a }) option.series = options return option }
然后是对3种颜色区域的一个处理
const colors = [ { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: '#1DBC3F', // 0% 处的颜色 }, { offset: 1, color: '#1DBC3F', // 100% 处的颜色 }, ], }, { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: '#CB3939', // 0% 处的颜色 }, { offset: 1, color: '#CB3939', // 100% 处的颜色 }, ], }, { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: '#C0C0C0', // 0% 处的颜色 }, { offset: 1, color: '#C0C0C0', // 100% 处的颜色 }, ], }, ];
这里是灵活使用了echarts type为linear的组件,具体的一个配置项是怎么实现我并没有深入探究.
最终实现的一个效果图在真机上的展示
既保证了每段弧的首尾的圆角的问题,也实现了每段弧宽的增加
echarts这个库确实博大进深,同时对一些没有做过的需求的评估需要谨慎再谨慎,我看到这个图形时觉得用echarts应该就ok了,但实际在开发的过程中,坑还是很多,同样机会也在不经意中就出现了,机会还是留给有准备的人的,如果想着图形太复杂随随便便用个环形图就去实现可能在页面的呈现上也没有这么好的效果了.
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录前言hover 的实现click 的实现矩形的坐标哪来的点在多边形内的其他判断方法穿透本章小结前言上个章节中我们已经给物体加上了被选中的效果,现在可以上点交互了,这个章节主要实现的就是物体的 hover 和 click 事件,当鼠标 hover 到物体上时,我们会改变鼠标的样式使其变成移动的样子;当 hover 到
简单复制对象的最外层属性,不处理对象更深层次的对象属性,会导致复制对象和原始对象的深层次属性指向同一个内存。如果一个对象改变了内存的地址,就会影响另一个对象。
这篇文章主要为大家详细介绍了VUE+SpringBoot实现分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在javascript中,可以使用Number对象的toString()方法来将数字转为Hex(16进制),该方法可以解析指定数值,并尝试返回指定基数(进制)的字符串表示形式,语法为“指定数字对象.toString(16);”。
在 JavaScript 中如何判断两个值相等,这个问题看起来非常简单,但并非如此,在 JavaScript 中存在 4 种不同的相等逻辑,如果你不知道他们的区别,或者认为判断相等非常简单,本文就来为大家详细讲讲
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008