千家信息网

微信小程序如何实现雷达图

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关微信小程序如何实现雷达图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。雷达图(Radar Chart),又可称为戴布拉图、蜘蛛网图(Spider
千家信息网最后更新 2026年10月31日微信小程序如何实现雷达图

这篇文章给大家分享的是有关微信小程序如何实现雷达图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

雷达图(Radar Chart),又可称为戴布拉图、蜘蛛网图(Spider Chart),是财务分析报表的一种。即将一个公司的各项财务分析所得的数字或比率,就其比较重要的项目集中划在一个圆形的图表上,来表现一个公司各项财务比率的情况,使用者能一目了然的了解公司各项财务指标的变动情形及其好坏趋向。

先来看看效果图

开始上菜:

//.wxml ,接下来的操作将在这个Canvas上面绘制
//.wxss.radarContainer{   background-color: black;   width:100%;   height:420px;   display: flex;   justify-content:center;    align-items: center;    position: relative; }.radarCanvas{   width:400px;   height:400px;   margin: 0 auto;   position: absolute;}
//.js初始化数据:(我没写在data中)var numCount = 6;  //元素个数var numSlot = 5;  //一条线上的总节点数var mW = 400;  //Canvas的宽度var mCenter = mW / 2; //中心点var mAngle = Math.PI * 2 / numCount; //角度var mRadius = mCenter - 60; //半径(减去的值用于给绘制的文本留空间)//获取指定的Canvasvar radCtx = wx.createCanvasContext("radarCanvas")
//.js  模拟对战两方的数据  data: {    chanelArray1:[["战绩",88],["生存",30],["团战",66],["发育",90],["输出",95],["推进",88]],    chanelArray2: [["战绩", 24], ["生存", 60], ["团战", 88], ["发育", 49], ["输出", 46], ["推进", 92]]  },


基础数据准备完成,开始画图

// 第一步:绘制6条边 drawEdge: function(){   radCtx.setStrokeStyle("white")   radCtx.setLineWidth(2)  //设置线宽 for (var i = 0; i < numSlot; i++) { //计算半径     radCtx.beginPath() var rdius = mRadius / numSlot * (i + 1) //画6条线段 for (var j = 0; j < numCount; j++) { //坐标 var x = mCenter + rdius * Math.cos(mAngle * j); var y = mCenter + rdius * Math.sin(mAngle * j);       radCtx.lineTo(x, y);     }     radCtx.closePath()     radCtx.stroke()   }  },


// 第二步:绘制连接点  drawLinePoint:function(){    radCtx.beginPath(); for (var k = 0; k < numCount; k++) { var x = mCenter + mRadius * Math.cos(mAngle * k); var y = mCenter + mRadius * Math.sin(mAngle * k);      radCtx.moveTo(mCenter, mCenter);      radCtx.lineTo(x, y);    }    radCtx.stroke();  },


//第三步:绘制文字(文字位置可能需要微调)    drawTextCans: function (mData){      radCtx.setFillStyle("white")      radCtx.font = 'bold 17px cursive' //设置字体 for (var n = 0; n < numCount; n++) { var x = mCenter + mRadius * Math.cos(mAngle * n); var y = mCenter + mRadius * Math.sin(mAngle * n); // radCtx.fillText(mData[n][0], x, y); //通过不同的位置,调整文本的显示位置 if (mAngle * n >= 0 && mAngle * n <= Math.PI / 2) {          radCtx.fillText(mData[n][0], x+5, y+5);        } else if (mAngle * n > Math.PI / 2 && mAngle * n <= Math.PI) {          radCtx.fillText(mData[n][0], x - radCtx.measureText(mData[n][0]).width-7, y+5);        } else if (mAngle * n > Math.PI && mAngle * n <= Math.PI * 3 / 2) {          radCtx.fillText(mData[n][0], x - radCtx.measureText(mData[n][0]).width-5, y);        } else {          radCtx.fillText(mData[n][0], x+7, y+2);        }      }    },


//绘制红色数据区域(数据和填充颜色)  drawRegion: function (mData,color){       radCtx.beginPath(); for (var m = 0; m < numCount; m++){ var x = mCenter + mRadius * Math.cos(mAngle * m) * mData[m][1] / 100; var y = mCenter + mRadius * Math.sin(mAngle * m) * mData[m][1] / 100;      radCtx.lineTo(x, y);      }      radCtx.closePath();      radCtx.setFillStyle(color)      radCtx.fill();    },


//画点    drawCircle: function(mData,color){ var r = 3; //设置节点小圆点的半径 for(var i = 0; i


重复四五步的方法添加另一方的雷达图

.js文件完整内容如下var numCount = 6;var numSlot = 5;var mW = 400;var mH = 400;var mCenter = mW / 2; //中心点var mAngle = Math.PI * 2 / numCount; //角度var mRadius = mCenter - 60; //半径(减去的值用于给绘制的文本留空间)//获取Canvasvar radCtx = wx.createCanvasContext("radarCanvas")Page({ /**   * 页面的初始数据   */  data: { stepText:5, chanelArray1:[["战绩",88],["生存",30],["团战",66],["发育",90],["输出",95],["推进",88]], chanelArray2: [["战绩", 24], ["生存", 60], ["团战", 88], ["发育", 49], ["输出", 46], ["推进", 92]]  }, /**   * 生命周期函数--监听页面初次渲染完成   */  onReady: function () { //雷达图 this.drawRadar()  }, // 雷达图  drawRadar:function(){ var sourceData1 = this.data.chanelArray1 var sourceData2 = this.data.chanelArray2 //调用 this.drawEdge() this.drawLinePoint() //设置数据 this.drawRegion(sourceData1,'rgba(255, 0, 0, 0.5)') //第一个人的 this.drawRegion(sourceData2, 'rgba(255, 200, 0, 0.5)') //第二个人 //设置文本数据 this.drawTextCans(sourceData1) //设置节点 this.drawCircle(sourceData1,'red') this.drawCircle(sourceData2,'yellow') //开始绘制    radCtx.draw()  }, // 绘制6条边  drawEdge: function(){    radCtx.setStrokeStyle("white")    radCtx.setLineWidth(2)  //设置线宽 for (var i = 0; i < numSlot; i++) { //计算半径      radCtx.beginPath() var rdius = mRadius / numSlot * (i + 1) //画6条线段 for (var j = 0; j < numCount; j++) { //坐标 var x = mCenter + rdius * Math.cos(mAngle * j); var y = mCenter + rdius * Math.sin(mAngle * j);        radCtx.lineTo(x, y);      }      radCtx.closePath()      radCtx.stroke()    }   }, // 绘制连接点  drawLinePoint:function(){    radCtx.beginPath(); for (var k = 0; k < numCount; k++) { var x = mCenter + mRadius * Math.cos(mAngle * k); var y = mCenter + mRadius * Math.sin(mAngle * k);      radCtx.moveTo(mCenter, mCenter);      radCtx.lineTo(x, y);    }    radCtx.stroke();  }, //绘制数据区域(数据和填充颜色)  drawRegion: function (mData,color){       radCtx.beginPath(); for (var m = 0; m < numCount; m++){ var x = mCenter + mRadius * Math.cos(mAngle * m) * mData[m][1] / 100; var y = mCenter + mRadius * Math.sin(mAngle * m) * mData[m][1] / 100;      radCtx.lineTo(x, y);      }      radCtx.closePath();      radCtx.setFillStyle(color)      radCtx.fill();    }, //绘制文字    drawTextCans: function (mData){      radCtx.setFillStyle("white")      radCtx.font = 'bold 17px cursive' //设置字体 for (var n = 0; n < numCount; n++) { var x = mCenter + mRadius * Math.cos(mAngle * n); var y = mCenter + mRadius * Math.sin(mAngle * n); // radCtx.fillText(mData[n][0], x, y); //通过不同的位置,调整文本的显示位置 if (mAngle * n >= 0 && mAngle * n <= Math.PI / 2) {          radCtx.fillText(mData[n][0], x+5, y+5);        } else if (mAngle * n > Math.PI / 2 && mAngle * n <= Math.PI) {          radCtx.fillText(mData[n][0], x - radCtx.measureText(mData[n][0]).width-7, y+5);        } else if (mAngle * n > Math.PI && mAngle * n <= Math.PI * 3 / 2) {          radCtx.fillText(mData[n][0], x - radCtx.measureText(mData[n][0]).width-5, y);        } else {          radCtx.fillText(mData[n][0], x+7, y+2);        }      }    }, //画点    drawCircle: function(mData,color){ var r = 3; //设置节点小圆点的半径 for(var i = 0; i

感谢各位的阅读!关于"微信小程序如何实现雷达图"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数据 雷达 半径 战绩 财务 发育 输出 公司 内容 文字 文本 节点 程序 中心点 区域 圆点 坐标 字体 更多 比率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技保险 金融科技创新监管互联网金融 鑫亿盛互联网科技 云电互联网科技 致聘互联网科技 长亮科技互联网金融 一五八零互联网科技 太原新华互联网科技学校怎么样 银川新华互联网科技学校地址 北京华百购互联网科技有限公司 互联网科技与管理 浙江互联网科技研学营 苏州铭阳互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 江苏苏星互联网科技有限公司 广州富喜互联网络科技 扫呗互联网科技有限公司 神州科技互联网有限公司 科技互联网经济论坛 前海云享互联网科技 北京路客互联网科技有限公司 互联网科技ppt模板 互联网科技公司名称 无锡溥仪互联网科技有限公司 华中科技有哪些互联网大佬 贵州叶脉互联网科技有限公司所属行业 互联网科技公司营业执照怎么办理 启辰互联网科技 米泉互联网科技专业怎么样 互联网科技博主张洲
0