用canvas 画饼状图

<canvas id="cans"  height="800" width="1200" ></canvas>

<script>
  function disToRad(n){ // 把角度转换为弧度
    return n*Math.PI/180;
    //π用PI表示,π=180°,所以1°=PI/180
  }
  window.onload=function(){
    let cans=document.getElementById("cans"); //获取画布
    let ctx=cans.getContext("2d"); //创建画板
    let cx=150; //圆心x轴坐标
    let cy=200; //圆心y轴坐标
    let r=150; //圆半径

    function pie(startAng,endAng,color){ // 画扇形
      let nx,ny; //x轴初始位置坐标
      ctx.beginPath(); //防止之前画好的部分受后面画的影响
      ctx.moveTo(cx,cy); //画笔开始坐标(即圆的中心坐标)

      nx=cx+Math.sin(disToRad(startAng))*r; //弧线初始点的x轴坐标
      ny=cy-Math.cos(disToRad(startAng))*r;
      ctx.lineTo(nx,ny); //设置终点坐标(弧线初始点坐标)
      ctx.arc(cx,cy,r,disToRad(startAng-90),disToRad(endAng-90),false); //画扇形,弧度=度数-90
      ctx.closePath(); //图形闭合
      ctx.stroke(); //描边
      ctx.fillStyle=color; //设置填充颜色
      ctx.fill(); //填充
  }
  var data=[10,30,35,20,5];
  let color=[‘red‘,‘pink‘,‘blue‘,‘yellow‘,‘orange‘];
  let sum=data.reduce(function(prev,current){
    return prev+current; //求总和
  })
  let avgDegree=data.map(function(item){
    return item/sum*360;
    // 一个数据值所占用的角度
  })
  lastDegree=0; //设置初始度数
  avgDegree.forEach(function(item,index){
    pie(lastDegree,lastDegree+item,color[index]); //调用pie(),的分别循环换获取
    lastDegree+=item;
  })
}
</script>

原文地址:https://www.cnblogs.com/suga/p/8572819.html

时间: 2024-08-03 02:16:29

用canvas 画饼状图的相关文章

[控件] 画饼状图的控件

画饼状图的控件 效果 注意:支持遮罩效果 源码 https://github.com/YouXianMing/CircleView // // CircleView.h // YXMWeather // // Created by XianMingYou on 15/5/12. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> @interface CircleView : U

Quartz2d 画饼状图 图形上下文栈 矩阵操作 裁剪圆角图片

画饼状图 - (void)drawRect:(CGRect)rect { // Drawing code // 需求:根据sections的数据,绘制多个扇形 // 1.获取上下文(Layer Graphics Context) CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.根据sections的个数,计算扇形的起始和结束位置来画扇形 NSInteger count = self.sections.count; // 如果没有数据,

canvas+js画饼状图

效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>饼状图</title> </head> <body> <canvas id="canvas"></canvas> <script> (function () {

html5 canvas实现饼状图

实现的效果如下: 通过canvas来实现的,主要是想练习封装插件.只需要在html里面简单的添加代码,就可以实现饼状图的自动添加.对于饼状图的颜色,比例等都可以根据需要进行调节. 具体的代码地址:

HTML画饼状图

<!DOCTYPE HTML> <html> <head> <title>简单化饼图</title> <meta charset="utf-8"/> </head> <body> <canvas id="cav" width="800" height="800"> 对不起,您的浏览器版本过低,不支持HTML5. <

python plotly 画饼状图

代码 import pandas as pd import numpy as np import plotly.plotly as py import plotly.graph_objs as go path = '/home/v-gazh/PycharmProjects/us_data/limit_code.csv' df = pd.read_csv(path) df.set_index(['code'], inplace=True) # ST 占比 total_count = len(df)

PHP画矩形,椭圆,圆,画椭圆弧 ,饼状图

1:画矩形: imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) imagerectangle() 用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2.图像的左上角坐标为 0, 0. 2:画椭圆: imageellipse ( resource $image , int $cx , int $cy , int $width

iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点.终止点(也称锚点)以及两个相互分离的中间点. 滑动两个中间点,贝塞尔曲线的形状会发生变化. UIBezierPath :对象是CGPathRef数据类型的封装,可以方便的让我们画出 矩形 . 椭圆 或者 直线和曲线的组合形状 初始化方法: + (instancetype)bezierPath; /

android圆饼状图中怎么设置百分比

============问题描述============ 我希望设置成能显示百分数的,如下图 这是我画饼状图的方法,我想给我一点思路 public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) ============解决方案1============ http://www.2cto.com/kf/201402/278932.html ===========