canvas+js画饼状图
效果:

源码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>饼状图</title>
</head>
<body>
<canvas id="canvas"></canvas>
<script> (function () {
var data = [{
"value":"0.4",
"color":"red",
"name":"JAVA"
},{
"value":"0.3",
"color":"green",
"name":"PYTHON"
},{
"value":"0.2",
"color":"blue",
"name":"C++"
},{
"value":"0.1",
"color":"grey",
"name":"PHP"
}];
var canvas = document.getElementById("canvas");
//设置宽高不从css中设置
canvas.width = 600;//设置canvas宽
canvas.height = 600;//设置canvas高
canvas.style.border = "1px solid red";
//获取上下文
var ctx = canvas.getContext("2d");
//画图
var x0 = 300,y0 = 300;//圆心
var x,y;//文字放置位置
var radius = 100;
var tempAngle = -90;//画圆的起始角度
for(var i = 0;i<data.length;i++){
var startAngle = tempAngle*Math.PI/180;//起始弧度
var angle = data[i].value*360;
var endAngle = (tempAngle+angle)*Math.PI/180;//结束弧度
var textAngle = tempAngle + 0.5*angle;//文字放的角度
x = x0 + Math.cos(textAngle*Math.PI/180)*(radius+20);//文字放的X轴
y = y0 + Math.sin(textAngle*Math.PI/180)*(radius+20);//文字放的Y轴
//如果文字在圆形的左侧,那么让文字 对齐方式为 文字结尾对齐当前坐标。
if( textAngle > 90 && textAngle < 270 ) {
ctx.textAlign = 'end';
}
var text = data[i].name + " "+ data[i].value*100+"%";
ctx.fillText(text,x,y);
ctx.beginPath();
ctx.moveTo(x0,y0);
ctx.fillStyle = data[i].color;
ctx.arc(x0,y0,radius,startAngle,endAngle);
ctx.fill();
tempAngle += angle;
}
}());
</script>
</body>
</html>
canvas+js画饼状图的更多相关文章
- 利用Tkinter和matplotlib两种方式画饼状图
当我们学习python的时候,总会用到一些常用的模块,接下来我就详细讲解下利用两种不同的方式画饼状图.首先利用[Tkinter]中的canvas画布来画饼状图: from tkinter import ...
- canvas学习之饼状图
接着上一节说,这次我使用canvas绘制了饼状图,主要是SectorGraph.js, 引入 import {canvasPoint} from '../../assets/js/canvas';im ...
- vue中使用echarts画饼状图
echarts的中文文档地址:https://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20EC ...
- HTML5之Canvas绘图实例——饼状图
实现饼状分布画图(如下):调试环境:Firefox
- highcharts-3d.js实现饼状图
嘛,首先,废话一下,这个插件挺好用的.我是因为做亮灯率demo所以接触了它. 首先引用外部文件,jQuery.js,highcharts.js,highcharts-3d.js,好的,这就搞定了第一步 ...
- 用D3.js画树状图
做项目遇到一个需求,将具有层级关系的词语用树状图的形式展示它们之间的关系,像这样: 或者是这样: 上面的图片只是样例,跟我下面的代码里面用的数据不同 网上有很多这种数据可视化展示的js控件,我这里选择 ...
- D3.js:饼状图的制作
假设有如下数据需要可视化: var dataset = [ 30 , 10 , 43 , 55 , 13 ]; 这样的值是不能直接绘图的.例如绘制饼状图的一个部分,需要知道一段弧的起始角度和终止角度, ...
- python plotly 画饼状图
代码 import pandas as pd import numpy as np import plotly.plotly as py import plotly.graph_objs as go ...
- Python数据可视化:画饼状图、折线图、圈图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. from math import pi import matplotlib ...
随机推荐
- 全球顶尖大学的UX课程资源,英文!
本文由MOCKPLUS团队原创,转载请标明出处,原型设计工具就用更快.更简单的mockplus 要想成为一名优秀的UX设计师,需要掌握很多必备技能.比如,掌握用户体验设计的所有知识和信息架构(易用性方 ...
- 阿里云专属推荐码nuyxa6
申请成功!您的推荐码为nuyxa6 恭喜您获得阿里云专属推荐码,推荐码有效期至2017-03-04 14:43:49. 我们会在到期日前两周以站内信的方式通知您新的有效期.
- app开发中如何利用sessionId来实现服务端与客户端保持回话
app开发中如何利用sessionId来实现服务端与客户端保持回话 这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种: ...
- mybatis Generator 生成配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE generatorConfiguration ...
- C++中const在函数中的用法
1.const放在函数前面 如果我们的函数的返回值是以 指针形式 返回的,如果在函数前面加上const修饰,则表示指针指向的内容是不能被改变的,并且接收返回值的 指针变量必须是const修饰的,例如: ...
- php redis 单例模式
单例模式思想其实很简单 首先 有一个实例的静态变量 构造方法和克隆方法设置为私有,防止外部直接new 提供一个获取实例的静态方法 代码如下: class Redis { private static ...
- tpshop使用中遇到的问题
1.短信配置里:商家发货时是否给客户发短信 配置了 开启 如果购买者个人资料里的电话没填写,商家点击发货时, 程序会挂掉 解决方法:修改application\common\logic\SmsL ...
- java内存溢出异常
名称 特征 作用 配置参数 异常 程序 计数器 占用内存小,线程私有, 生命周期与线程相同 大致为字节码行号指示器 无 无 虚拟机栈 线程私有,生命周期与线程 相同,使用连续的内存空间 Java 方法 ...
- 20169205实验四 Android程序设计
20169205实验四 Android程序设计 实验内容及步骤 (一)第一个android studio项目 android studio与eclipse的传统安卓开发有一些不同之处 android ...
- phonegap/cordova学习建议
在技术群里面,一直有一些新人进来,问了一些让人可笑不得的问题.国内的资料相对比较少,而且很旧,都是一些2.X版本的资料.因此想写一些东西,帮助一下新人,让他们少走弯路. 首先说一些很多人问的问题,个人 ...