用canvas绘制带有文字注释的扇形图

    xiaoxiao2023-11-03  165

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>canvas绘制扇形</title> </head> <body> <canvas id="myCanvas" width="600" height="600" style="border:1px solid #000"></canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); var data =[{ "value":.2, "color":'red', "title":"应届生" },{ "value":.3, "color":"blue", "title":"社会生" },{ "value":.4, "color":"green", "title":"复读生" },{ "value":.1, "color":"pink", "title":"借读生" },]; var startangle= -90; //从-90度开始绘制 for(var i=0;i<data.length;i++){ ctx.beginPath(); ctx.moveTo(300,300);//定义一个圆心点 var angle = data[i].value*360; //绘制data扇形的角度 ctx.fillStyle = data[i].color;//填充扇形颜色 var beginangle= startangle*Math.PI/180;//把角度转为弧度,起始弧度 var endangle = (startangle+angle)*Math.PI/180;//结束弧度 ctx.arc(300,300,150,beginangle,endangle); ctx.fill(); //绘制文字 var text = data[i].title+data[i].value*100+"%"; //文字的角度 var textangle = startangle + 1/2*angle; var x,y;//定义文字的坐标 x = 300+Math.cos(textangle*Math.PI/180)*(150+20);//300为圆心点,150为半径 y = 300+Math.sin(textangle*Math.PI/180)*(150+20); //对齐最后一个文字 if(textangle>90&&textangle<270){ ctx.textAlign = 'end' } ctx.fillText(text,x,y); ctx.fill(); startangle+=angle;//下一次绘制的起始角度 } </script> </body> </html>

     

    最新回复(0)