91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序如何實現雷達圖

發布時間:2022-03-15 11:13:10 來源:億速云 閱讀:867 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關微信小程序如何實現雷達圖的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

雷達圖(Radar Chart),又可稱為戴布拉圖、蜘蛛網圖(Spider Chart),是財務分析報表的一種。即將一個公司的各項財務分析所得的數字或比率,就其比較重要的項目集中劃在一個圓形的圖表上,來表現一個公司各項財務比率的情況,使用者能一目了然的了解公司各項財務指標的變動情形及其好壞趨向。

先來看看效果圖

開始上菜:

//.wxml ,接下來的操作將在這個Canvas上面繪制

<view class='radarContainer'>
<canvas class='radarCanvas' canvas-id='radarCanvas'></canvas>
</view>
//.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; //半徑(減去的值用于給繪制的文本留空間)
//獲取指定的Canvas
var 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<numCount; i ++){
 var x = mCenter + mRadius * Math.cos(mAngle * i) * mData[i][1] / 100;
 var y = mCenter + mRadius * Math.sin(mAngle * i) * mData[i][1] / 100;

          radCtx.beginPath();
          radCtx.arc(x, y, r, 0, Math.PI * 2);
          radCtx.fillStyle = color;
          radCtx.fill();
        }
    }

 


重復四五步的方法添加另一方的雷達圖

 

.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; //半徑(減去的值用于給繪制的文本留空間)
//獲取Canvas
var 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<numCount; i ++){
 var x = mCenter + mRadius * Math.cos(mAngle * i) * mData[i][1] / 100;
 var y = mCenter + mRadius * Math.sin(mAngle * i) * mData[i][1] / 100;

          radCtx.beginPath();
          radCtx.arc(x, y, r, 0, Math.PI * 2);
          radCtx.fillStyle = color;
          radCtx.fill();
        }

      }

})

感謝各位的閱讀!關于“微信小程序如何實現雷達圖”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台安县| 商都县| 常州市| 基隆市| 澄江县| 千阳县| 泸州市| 潮州市| 南漳县| 郎溪县| 桐庐县| 格尔木市| 林周县| 松溪县| 九寨沟县| 新乡市| 易门县| 乌拉特中旗| 岗巴县| 全椒县| 镇雄县| 泾川县| 望都县| 南投县| 琼中| 安达市| 奉新县| 英山县| 娄底市| 崇州市| 醴陵市| 公主岭市| 凤阳县| 台东县| 泸水县| 临沭县| 常山县| 建水县| 新郑市| 呼伦贝尔市| 拉孜县|