用Echarts制作多段圆环图的过程及优化
Admin 2022-11-15 群英技术资讯 1520 次浏览
今天就跟大家聊聊有关“用Echarts制作多段圆环图的过程及优化”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“用Echarts制作多段圆环图的过程及优化”文章能对大家有帮助。
第一眼看的时候以为用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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家介绍了关于JS对象数组去重的3种方法,三种方法分别包括使用filter和Map、使用reduce以及for循环,文中每个方法都给出了示例代码,需要的朋友可以参考下
jQuery如何停止函数执行,用什么语句?终止某个函数执行是很常见的需求,jQuery中我们可以使用函数来实现,下面我们具体的来看看是怎样做的,希望对大家学习jQuery的使用有帮助。
目录前言宏任务宏任务队列微任务微任务队列Event-Loop执行顺序结语前言首先我们要了解javascript是一个单线程的脚本语言,也就是说我们在执行代码的过程中不会出现同时进行两个进程(执行两段代码)。Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)
这篇文章主要给大家介绍了关于Vue生命周期介绍和钩子函数的相关资料,对大家学习或者使用vue2具有一定的参考学习价值,需要的朋友们下面随小编一起来看看吧
assert模块提供了简单的断言测试功能,主要用来内部使用,也可能require(‘assert’)后在外部进行使用。 assert模块的API为locked状态,也就是说,这个模块的API将不会再有添加或修改了。 Assert模块方法列表: assert(value[,message]) assert.deepEqual(actual
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008