帆布如何绘制饼图

  介绍

小编给大家分享一下帆布如何绘制饼图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

使用原生<代码> canvasAPI 绘制饼图(南丁格尔玫瑰)。(截图以及数据来自于百度Echarts官方示例库【查看示例链接】)。

帆布如何绘制饼图”> </p> <h3 id=岸亍5闾崾尽?二。重点提示</h3> <p>南丁格尔玫瑰图的画法有很多种,<代码> Echarts> </代码中提供的以半径或面积两种不同模式,本文中以面积比例画法为例,绘制算法如下:</p> <ol> <李>确定每个扇区的角度。由于所有扇区的角度加在一起为2π,我们先按照数据比例来计算角度:</李> </ol> <p> <img src=三。示例代码

南丁格尔玫瑰图绘制示例代码:

//绘制饼图   drawPieChart(选项);/* *   *绘制饼图   * @param{[型]}选项(描述)   * @return{[型]}[描述]   */函数drawPieChart(选项){//记录最大数值以反求面积总和   选项。maxValue=0;//求数据集总和以在后续计算每个扇形的角度比例   选项。totalNum=options.data.reduce ((pre cur)=祝辞{   如果(cur.value比;options.maxValue) {   选项。maxValue=cur.value;   }   返回前+ cur.value;   },0);/*以最大值对应最大半径来计算面积总和,并覆盖原值   *使得最大的一块扇形外圆半径为options.radius [0]   *内圆半径为options.radius [1]   */让Rmin=options.radius [0];   我们征求=options.radius [1];   让r=数学。√(征求*征求- Rmin * Rmin) *选项。totalNum/选项。maxValue + Rmin * Rmin);   选项。半径[1]=r;//移动坐标系原点至绘图中心   让paintingCenter={   x:方法(options.center[0], 10)/100 *(选项。chartZone [2]——options.chartZone [0]) + options.chartZone [0],   y:方法(options.center[1], 10)/100 *(选项。chartZone [3]——options.chartZone [1]) + options.chartZone [1]   }   context.translate (paintingCenter。x, paintingCenter.y);//绘制每个扇形,过程中累加旋转角度   让allAngle=options.data.reduce((上一页,坏蛋、索引)=祝辞{   上下文。fillStyle=options.colorPool(指数)   让角=calcPaintingData (cur,选项);   返回上一页+角;   },0);//绘制中空白色圆   context.beginPath ();   上下文。fillStyle=& # 39;白色# 39;;   context.arc (0, 0, options.radius [0], 0, 2 * Math.PI,假);   context.fill ();   }/* *   *计算每个扇形所需要的绘图参数   */函数calcPaintingData(数据、选择){   让规模=数据。价值/options.totalNum;   让角=* 2 * Math.PI规模;   让Rmin=options.radius [0];   我们征求=options.radius [1];   让r=数学。√规模*(征求*征求- Rmin * Rmin) + Rmin * Rmin);   数据。r=r;//绘制扇形   paintFan ({   r:,   角:角,   数据:数据,   选项:选项   });   返回角;//将角度值返回给外层函数以供累加   }//绘制扇形   函数paintFan(选择){   context.beginPath ();   context.lineTo (opt.r 0);   opt.r context.arc (0, 0, 0, opt.angle,假);   context.lineTo (0,0);   context.closePath ();   context.fill ();   context.rotate (opt.angle);   }

浏览器中可查看效果:

帆布如何绘制饼图”> </p> <p id=八摹8吡恋氖迪炙悸贰?四。悬停高亮的实现思路</p> <ol> <李>绘图过程中,将每个扇区的绘图数据(半径,相对于圆心的起始转角,扇区角度)均挂载在绘图数据上。</李> <李>在<代码>帆布> </代码标签上监听鼠标移动事件<代码> mousemove> </代码,并在回调函数中将鼠标移动事件<代码> event.clientX </代码>和<代码> event.clientY> </代码转换为相对于画布坐标的数值<h2 class=帆布如何绘制饼图