canvas画饼状图
程序员文章站
2022-06-01 09:36:05
...
首先代码并不是原创。
然后,准备弄一个根据数据库创建图表的框架,所以自己现在网上学了一点,先做个饼状图来看看:
<script type="text/javascript" language="javascript">
//设置几个全局变量 计数,概率名数组,概率大小数组,还有分类颜色数组
var DataNum = 0;
var data_arr = new Array();//
var text_arr = new Array();
var color_arr = new Array();
var color_arr = ["#00FF21", "#FFAA00", "#00AABB", "#FF4400","#FF0000"];//颜色可以多弄几个但是我懒得弄
function run(){ //执行画图方法
drawCircle("canvas_circle");
}
function drawCircle(canvasId){ //画饼状图的方法
data_arr = new Array();
text_arr = new Array();//每次执行都要初始化数据
if(DataNum == 0){
alert("无数据");
return;
}
else{
var j=parseFloat(0);
for(var i = 0; i < DataNum; i++){ //动态添加
data_arr[i] = document.getElementById("data_arr"+i).value; //数据
text_arr[i] = document.getElementById("text_arr"+i).value; //数据名称
j=parseFloat(j)+parseFloat(data_arr[i]); //相加的时候强制转换成浮点型,否知直接字符相加
}
if(j!=1){alert("输入比例不为1,请输入正确的比例");return;}
}
var c = document.getElementById(canvasId); //获取canvas对象
var ctx = c.getContext("2d");
alert("ss");
ctx.clearRect(0,0,500,500);
var radius = c.height /2-20; //半径
var ox = radius +20, oy = radius +20; //圆心
var width = 30, height = 10; //图例宽和高
var posX = ox * 2 + 20, posY = 30; //
var textX = posX + width + 5, textY = posY + 10;
var startAngle = 0; //起始弧度
var endAngle = 0; //结束弧度
for (var i = 0; i < data_arr.length; i++)
{
//绘制饼图
endAngle = endAngle + data_arr[i] * Math.PI * 2; //结束弧度
ctx.fillStyle = color_arr[i]; //选择颜色
ctx.beginPath();
ctx.moveTo(ox, oy); //移动到到圆心
ctx.arc(ox, oy, radius, startAngle, endAngle, false);
ctx.closePath();
ctx.fill();
startAngle = endAngle; //设置起始弧度
//绘制比例图及文字
ctx.fillStyle = color_arr[i];
ctx.fillRect(posX, posY + 20 * i, width, height);
ctx.moveTo(posX, posY + 20 * i);
ctx.font = 'bold 12px 微软雅黑'; //斜体 30像素 微软雅黑字体
ctx.fillStyle = color_arr[i]; //"#000000";
var percent = text_arr[i] + ":" + 100 * data_arr[i] + "%";
ctx.fillText(percent, textX, textY + 20 * i);
}
}
function add(){ //添加数据
var new1 = dataInput.insertRow();
var new11 = new1.insertCell();
var new12 = new1.insertCell();
new11.innerHTML ="数据名:<input type='text' size='10'id='text_arr"+DataNum+"'/>";
new12.innerHTML ="百分比:<input type='text' size='10'id='data_arr"+DataNum+"'/>";
DataNum++;
}
//页面加载时执行init()函数
// window.onload = init;
</script>
就这些,先记着,也许以后有用。
下面是HTML5代码
<canvas id="canvas_circle" width="500" height="300">
浏览器不支持canvas
</canvas>
然后,准备弄一个根据数据库创建图表的框架,所以自己现在网上学了一点,先做个饼状图来看看:
<script type="text/javascript" language="javascript">
//设置几个全局变量 计数,概率名数组,概率大小数组,还有分类颜色数组
var DataNum = 0;
var data_arr = new Array();//
var text_arr = new Array();
var color_arr = new Array();
var color_arr = ["#00FF21", "#FFAA00", "#00AABB", "#FF4400","#FF0000"];//颜色可以多弄几个但是我懒得弄
function run(){ //执行画图方法
drawCircle("canvas_circle");
}
function drawCircle(canvasId){ //画饼状图的方法
data_arr = new Array();
text_arr = new Array();//每次执行都要初始化数据
if(DataNum == 0){
alert("无数据");
return;
}
else{
var j=parseFloat(0);
for(var i = 0; i < DataNum; i++){ //动态添加
data_arr[i] = document.getElementById("data_arr"+i).value; //数据
text_arr[i] = document.getElementById("text_arr"+i).value; //数据名称
j=parseFloat(j)+parseFloat(data_arr[i]); //相加的时候强制转换成浮点型,否知直接字符相加
}
if(j!=1){alert("输入比例不为1,请输入正确的比例");return;}
}
var c = document.getElementById(canvasId); //获取canvas对象
var ctx = c.getContext("2d");
alert("ss");
ctx.clearRect(0,0,500,500);
var radius = c.height /2-20; //半径
var ox = radius +20, oy = radius +20; //圆心
var width = 30, height = 10; //图例宽和高
var posX = ox * 2 + 20, posY = 30; //
var textX = posX + width + 5, textY = posY + 10;
var startAngle = 0; //起始弧度
var endAngle = 0; //结束弧度
for (var i = 0; i < data_arr.length; i++)
{
//绘制饼图
endAngle = endAngle + data_arr[i] * Math.PI * 2; //结束弧度
ctx.fillStyle = color_arr[i]; //选择颜色
ctx.beginPath();
ctx.moveTo(ox, oy); //移动到到圆心
ctx.arc(ox, oy, radius, startAngle, endAngle, false);
ctx.closePath();
ctx.fill();
startAngle = endAngle; //设置起始弧度
//绘制比例图及文字
ctx.fillStyle = color_arr[i];
ctx.fillRect(posX, posY + 20 * i, width, height);
ctx.moveTo(posX, posY + 20 * i);
ctx.font = 'bold 12px 微软雅黑'; //斜体 30像素 微软雅黑字体
ctx.fillStyle = color_arr[i]; //"#000000";
var percent = text_arr[i] + ":" + 100 * data_arr[i] + "%";
ctx.fillText(percent, textX, textY + 20 * i);
}
}
function add(){ //添加数据
var new1 = dataInput.insertRow();
var new11 = new1.insertCell();
var new12 = new1.insertCell();
new11.innerHTML ="数据名:<input type='text' size='10'id='text_arr"+DataNum+"'/>";
new12.innerHTML ="百分比:<input type='text' size='10'id='data_arr"+DataNum+"'/>";
DataNum++;
}
//页面加载时执行init()函数
// window.onload = init;
</script>
就这些,先记着,也许以后有用。
下面是HTML5代码
<canvas id="canvas_circle" width="500" height="300">
浏览器不支持canvas
</canvas>
推荐阅读
-
Android编程实现canvas绘制柱状统计图功能【自动计算宽高及分度值、可左右滑动】
-
Android编程实现canvas绘制饼状统计图功能示例【自动适应条目数量与大小】
-
DevExpress之ChartControl实现饼状图百分比演示实例
-
DevExpress之饼状图突出(Explode)设置实例
-
DevExpress之ChartControl实现饼状图百分比演示实例
-
DevExpress设置饼状图的Lable位置实例
-
DevExpress之饼状图突出(Explode)设置实例
-
iOS实现带指引线的饼状图效果(不会重叠)
-
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
-
基于 HTML5 Canvas实现 的交互式地铁线路图