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 ...
随机推荐
- Node节点部署
一.部署kubelect 二进制包准备 将软件包从linux-node1复制到linux-node2.linux-node3中去 [root@linux-node1 ~]# cd /usr/local ...
- Eigen库和STL容器冲突问题
博客参考:https://blog.csdn.net/huajun998/article/details/54311561 在程序中想使用类似于如下的容器 std::vector<Eigne:: ...
- python动态捕获异常-乾颐堂
在讨论动态捕获异常时让我大吃一惊的是,可以让我找到隐藏的Bug和乐趣... 有问题的代码 下面的代码来自一个产品中看起来是好的抽象代码 - slightly(!) .这是调用一些统计数据的函数,然后进 ...
- dedecms图片上传函数
/** * 图片上传类 * @param $file上传图片信息 * @param $ty */ function upload_pic($file, $ty) { if (!is_uploaded_ ...
- 在PowerDesigner中设计物理模型1——表和主外键(转)
出处:http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念 ...
- IP多播技术及其应用
随着全球互联网(Internet)的迅猛发展,上网人数正以几何级数快速增长,以因特网技术为主导的数据通信在通信业务总量中的比列迅速上升,因特网业务已成为多媒体通信业中发展最为迅速.竞争最为激烈的领域. ...
- cron.c
/* $OpenBSD: cron.c,v 1.39 2007/02/18 23:59:03 jmc Exp $ */ /* Copyright 1988,1990,1993,1994 by Paul ...
- Jmeter-Ant 生成测试报告
一.安装jmeter 配置环境变量 JMETER_HOME D:\SProgram\jmeter CLASSPATH %JMETER_HOME\lib\ext\ApacheJMeter_core.ja ...
- 9.使用GetData,Children实现对ZNode的监控
一. zookeeper中的watcher 1. exists :监控的是[znode]的CUD 的操作 2. getdata 的时候注册的watcher[U,D 监控]update delete ...
- Android-bindService本地服务-初步
在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢? 答:是因为bindService可以实现Activity-->S ...