news 2026/8/3 0:33:18

echarts实现3d饼图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
echarts实现3d饼图

上效果先

使用

import*asechartsfrom'echarts'import'echarts-gl'letmyCharts=echarts.init(document.getElementById('yearInventoryStatisticsId'))initChartR2(myCharts)
//3d饼图exportconstinitChartR2=function(echartsM){// 传入数据生成 optionconstoptionsData=[{name:'业务A',value:13.87,itemStyle:{opacity:0.5,color:'#7bc35a'}},{name:'业务B',value:0.6,itemStyle:{opacity:0.5,color:'#2f97df'}},{name:'业务C',value:9.53,itemStyle:{opacity:0.5,color:'#4268d6'}},{name:'业务D',value:72.17,itemStyle:{opacity:0.5,color:'#d35e5f'}},{name:'业务E',value:3.67,itemStyle:{opacity:0.5,color:'#c2c763'}},{name:'业务F',value:0.17,itemStyle:{opacity:0.5,color:'#8fdffe'}}]constseries=getPie3D(optionsData.map(item=>{if(item.value<5){item.value=5}returnitem}),0,240,28,26,0.5)series.push({name:'pie2d',type:'pie',label:{show:false,opacity:1,position:'outside',fontSize:12,lineHeight:20,textStyle:{fontSize:12,color:'#fff'}},labelLine:{show:false,length:30,length2:30},minAngle:10,startAngle:-50,// 起始角度,支持范围[0, 360]。clockwise:false,// 饼图的扇区是否是顺时针排布。上述这两项配置主要是为了对齐3d的样式radius:['0','25%'],center:['50%','50%'],data:optionsData.map(item=>{item.itemStyle.opacity=0returnitem})})// 准备待返回的配置项,把准备好的 legendData、series 传入。constoption={legend:{show:false},animation:true,tooltip:{formatter:(params)=>{if(params.seriesName!=='mouseoutSeries'&&params.seriesName!=='pie2d'){return`${params.seriesName}<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>${option.series[params.seriesIndex].pieData.value+'%'}`}},textStyle:{fontSize:14}},title:{x:'center',top:'20',textStyle:{color:'#fff',fontSize:22}},// backgroundColor: '#0E3567',labelLine:{show:true,lineStyle:{color:'#7BC0CB'},normal:{show:true,length:10,length2:10}},label:{show:true,position:'outside',formatter:'{b} \n{d}%',textStyle:{color:'#fff',fontSize:'12px'}},xAxis3D:{min:-1,max:1},yAxis3D:{min:-1,max:1},zAxis3D:{min:-1,max:1},grid3D:{show:false,//圆环的高度boxHeight:0.02,// top: '30%',bottom:'50%',// environment: "rgba(255,255,255,0)",viewControl:{distance:300,//角度alpha:25,beta:60,autoRotate:false// 自动旋转}},series:series}console.log(echartsM,'echartsM')echartsM.setOption(option)}functiongetParametricEquation(startRatio,endRatio,isSelected,isHovered,k,height){// 计算constmidRatio=(startRatio+endRatio)/2conststartRadian=startRatio*Math.PI*2constendRadian=endRatio*Math.PI*2constmidRadian=midRatio*Math.PI*2// 如果只有一个扇形,则不实现选中效果。if(startRatio===0&&endRatio===1){isSelected=false}// 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)k=typeofk!=='undefined'?k:1/3// 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)constoffsetX=isSelected?Math.cos(midRadian)*0.1:0constoffsetY=isSelected?Math.sin(midRadian)*0.1:0// 计算高亮效果的放大比例(未高亮,则比例为 1)consthoverRate=isHovered?1.05:1// 返回曲面参数方程return{u:{min:-Math.PI,max:Math.PI*3,step:Math.PI/32},v:{min:0,max:Math.PI*2,step:Math.PI/20},x:function(u,v){if(u<startRadian){return(offsetX+Math.cos(startRadian)*(1+Math.cos(v)*k)*hoverRate)}if(u>endRadian){return(offsetX+Math.cos(endRadian)*(1+Math.cos(v)*k)*hoverRate)}returnoffsetX+Math.cos(u)*(1+Math.cos(v)*k)*hoverRate},y:function(u,v){if(u<startRadian){return(offsetY+Math.sin(startRadian)*(1+Math.cos(v)*k)*hoverRate)}if(u>endRadian){return(offsetY+Math.sin(endRadian)*(1+Math.cos(v)*k)*hoverRate)}returnoffsetY+Math.sin(u)*(1+Math.cos(v)*k)*hoverRate},z:function(u,v){if(u<-Math.PI*0.5){returnMath.sin(u)}if(u>Math.PI*2.5){returnMath.sin(u)}returnMath.sin(v)>0?1*height:-1}}}// 生成模拟 3D 饼图的配置项functiongetPie3D(pieData,internalDiameterRatio){constseries=[]letsumValue=0letstartValue=0letendValue=0constlegendData=[]constk=typeofinternalDiameterRatio!=='undefined'?(1-internalDiameterRatio)/(1+internalDiameterRatio):1/3// 为每一个饼图数据,生成一个 series-surface 配置for(leti=0;i<pieData.length;i++){sumValue+=pieData[i].valueconstseriesItem={name:typeofpieData[i].name==='undefined'?`series${i}`:pieData[i].name,type:'surface',parametric:true,wireframe:{show:false},pieData:pieData[i],pieStatus:{selected:false,hovered:false,k:k}}if(typeofpieData[i].itemStyle!=='undefined'){constitemStyle={}typeofpieData[i].itemStyle.color!=='undefined'?(itemStyle.color=pieData[i].itemStyle.color):nulltypeofpieData[i].itemStyle.opacity!=='undefined'?(itemStyle.opacity=pieData[i].itemStyle.opacity):nullseriesItem.itemStyle=itemStyle}series.push(seriesItem)}// 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,// 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。for(leti=0;i<series.length;i++){endValue=startValue+series[i].pieData.value series[i].pieData.startRatio=startValue/sumValue series[i].pieData.endRatio=endValue/sumValue series[i].parametricEquation=getParametricEquation(series[i].pieData.startRatio,series[i].pieData.endRatio,false,false,k,2000)startValue=endValue legendData.push(series[i].name)}returnseries}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 7:50:47

JVM-垃圾回收算法

一、垃圾回收思想垃圾回收的基本思想是考察每一个对象的可触及性&#xff0c;即从根节点开始是否可以访问到这个对象&#xff0c;如果可以&#xff0c;则说明当前对象正在被使用&#xff0c;如果从所有的根节点都无法访问到某个对象&#xff0c;说明对象已经不再使用了&#xf…

作者头像 李华
网站建设 2026/7/25 21:20:27

python基于django的汽车租赁买卖管理系统_189h7k1a

目录汽车租赁买卖管理系统概述核心功能模块技术实现亮点系统优势关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;汽车租赁买卖管理系统概述 该系统基于Django框架开发&#xff0c;旨…

作者头像 李华
网站建设 2026/7/31 11:04:34

降ai率从80%降到15%!免费降ai率工具实测,降低ai效果炸裂。

国庆假期一过&#xff0c;又到“论文人”的修罗场。朋友们&#xff0c;你是不是也被AIGC检测折磨过&#xff1f; 明明一行一字都自己写的&#xff0c;结果检测报告红得像过年&#xff1a;AI率99%&#xff01;那一刻真的想原地删库跑路。 不过话说回来&#xff0c;这两年确实有…

作者头像 李华
网站建设 2026/7/30 10:15:13

半导体集成电路详解:数字IC、逻辑器件。

半导体集成电路详解&#xff1a;数字IC、逻辑器件、微处理器与模拟IC 一、 数字IC与模拟IC&#xff1a;两大核心门类 根据WSTS分类&#xff0c;半导体芯片主要分为集成电路、分立器件、传感器和光电子器件。其中&#xff0c;集成电路&#xff08;IC&#xff0c;俗称“芯片”&am…

作者头像 李华
网站建设 2026/7/31 20:07:32

【毕业设计】基于python的遥感图片识别沙漠湖泊和森林基于CNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/31 11:55:14

dy x-tt-session-dtrait 逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由 此产生的一切后果均与作者无关&#xff01; 部分pyhon代码 url "aweme/v1…

作者头像 李华