一个简单地svg绘制饼图的demo,代码如下

<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title>chart</title>
<style>
#container {
width: 400px;
height: 400px;
}
</style>
</head> <body>
<div id="container"></div>
<script>
var data = [
{name: '苹果', value: 5},
{name: '香蕉', value: 10},
{name: '橙子', value: 8},
{name: '梨子', value: 16}
];
myChartPie(
document.getElementById('container'),
data
);
function myChartPie(ele,data) {
var rectx = 100; // x 半径
var recty = 100; // y 半径
var pointx = 200; // 圆心坐标x
var pointy = 200; //圆心坐标y
var pathhtml = '';
var html = '<svg xlms="http://www.w3c.org/2000/svg" version="1.1" width="800" height="800">'
var htmlclose = "</svg>";
var count = 0;
for (var j = 0;j < data.length;j++) {
count = count + (data[j].value-0);
}
var cx = 200; //起始点x
var cy = 100; //起始点y
var cxto = 0; //结束点x
var cyto = 0; // 结束点y
var countsqrt = 0;
for (var i = 0;i < data.length;i++) {
// 角度
countsqrt += data[i].value;
var sqrt = countsqrt / count;
if (data[i].value / count > 1 * 0.5) {
cxto = pointx + rectx * Math.sin(Math.PI * 2 * sqrt);
cyto = pointy - recty * Math.cos(Math.PI * 2 * sqrt);
pathhtml += '<path fill="' + MathColor(0,255) + '" stroke="' + '#000' + '"d="' + 'M ' + cx + ' ' + cy + ' ' +
'A ' + rectx + ' ' + recty + ' ' + '0 1 1 ' + cxto + ' ' + cyto + ' ' +
'L ' + pointx + ' ' + pointy + ' Z'
+ '"></path>';
}else {
cxto = pointx + rectx * Math.sin(Math.PI * 2 * sqrt);
cyto = pointy - recty * Math.cos(Math.PI * 2 * sqrt);
pathhtml += '<path fill="' + MathColor(0,255) + '" stroke="' + '#000' + '"d="' + 'M ' + cx + ' ' + cy + ' ' +
'A ' + rectx + ' ' + recty + ' ' + '0 0 1 ' + cxto + ' ' + cyto + ' ' +
'L ' + pointx + ' ' + pointy + ' Z'
+ '"></path>';
}
cx = cxto;
cy = cyto;
}
ele.innerHTML = html + pathhtml + htmlclose;
}
function MathColor (x,y) {
var r = Math.floor(Math.random() * (y-x + 1)) + x;
var g = Math.floor(Math.random() * (y-x + 1)) + x;
var b = Math.floor(Math.random() * (y-x + 1)) + x;
return 'rgb(' + r + ',' + g + ',' + b + ')';
}
</script>
</body> </html>

svg绘制一个简单地饼图的更多相关文章

  1. opengl学习笔记(五):组合变换,绘制一个简单的太阳系

    创建太阳系模型 描述的程序绘制一个简单的太阳系,其中有一颗行星和一颗太阳,用同一个函数绘制.需要使用glRotate*()函数让这颗行星绕太阳旋转,并且绕自身的轴旋转.还需要使用glTranslate ...

  2. Quartz2D之绘制一个简单的机器猫

    学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少. 今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下. 最近学习了Quar ...

  3. SVG绘制圆形简单示例分享

    今天分享“svg绘制圆形”部分 1.简单圆形 效果图如下: 关键代码: <svg xmlns="http://www.w3.org/2000/svg" version=&qu ...

  4. 如何使用openscad绘制一个简单的键帽.

    1 新建空项目 2测数据 测量得出数据.这个长方体的长宽高分别是1.6.4.6.8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备) 3画图 写代码 导入模型 为了方便以后 ...

  5. SVG绘制矩形简单示例分享

    最近我初学HTML5,刚在一步步学习SVG,积累了一些个人心得和程序代码,希望和大家分享,今天分享“svg之矩形”部分 1.简单矩形 效果图如下: 关键代码: <svg xmlns=" ...

  6. Unity3D学习笔记2——绘制一个带纹理的面

    目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...

  7. JavaScript+svg绘制的一个饼状图

    结果: svg参考:https://www.w3.org/TR/SVG/<body onload='document.body.appendChild( pieChart([12,23,34,4 ...

  8. 如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例

    现在给大家带来的是如何用DAX实现查看每个月中不同类别的排名前一位,最终完成效果如下!!! 首先我们需要两张简单的表 基数表 和类别表 当我们创建好表之后,我们再创建一个表格,然后我们将类别表里的列值 ...

  9. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

随机推荐

  1. 最全面的DialogFragment的使用,实现DialogFragment全屏、背景透明;

    Android推荐使用DialogFragment代替Dialog,好处就说一点吧,DialogFragment就是个盖在界面上的Fragment,它拥有Fragment一样的功能和生命周期,解决普通 ...

  2. 详解vuex

    一.vuex的作用: vuex是一个专为Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式变化. 作用:组件之间的通信,大规模的逻 ...

  3. leetCode58. 最后一个单词的长度

    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例: 输入: &quo ...

  4. js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  5. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)

    Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程) 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开 ...

  6. java基础语法(标识符 修饰符 关键字)

    标识符 用来表示类名,变量名,方法名,类型名,数组名,文件名的有效字符序列称为标识符.   1)只有字母(区分大小写),下划线,美元符号和数字组成,长度不受限制.注:字母包括英文26个字母 ,汉字,日 ...

  7. VUE系列一:VUE入门:搭建脚手架CLI(新建自己的一个VUE项目)

    一.VUE脚手架介绍 官方说明:Vue 提供了一个官方的 CLI,为单页面应用快速搭建 (SPA) 繁杂的脚手架.它为现代前端工作流提供了 batteries-included 的构建设置.只需要几分 ...

  8. React Native踩坑之旅

    原文连接:http://www.studyshare.cn/blog-front/blog/details/1137 最近做一个app,使用React Native实现,如果严格按照RN官方文档去配置 ...

  9. sublime_text3代码自动补全

    因为项目需要用sublime_text3编辑器,安装之后代码自动补全功能没有,这比较苦恼. 其实蛮简单的 英文界面:menu->Preferences->Setting-User-> ...

  10. 【源】ensp 绑定本地网卡与仿真设备进行通信 场景下 仿真设备ping 不通 本机IP 问题

    环境:Win7, ensp 1.2.00.500 问题现象:本机可以ping 通 仿真设备的接口IP,但是在仿真设备上 ping不通 本机接口ip. 问题处理:把本机win7系统只带的防火墙关闭后,在 ...