你的位置:首页 > 网页设计

[网页设计]用canvas绘制折线图


 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4   <meta charset="UTF-8"> 5   <title>用canvas绘制折线图</title> 6 </head> 7 <body> 8   <canvas id="cv"></canvas> 9 </body>10 </html>11 <script>12   var cv = document.getElementById("cv");13   cv.width = 600;14   cv.height = 400;15   cv.style.border = "1px solid red";16   var ctx = cv.getContext("2d");17   var data2 = [.3, .1, .2, .4, .2, .7, .3, .9];18   var data3 = [3, 12, 14, 17, 29, 33, 40, 52];19 20   getBrokenLine(data2, "#f00");21   getBrokenLine(data3, "#0f0");22 23   //封装一个折线图的函数24   function getBrokenLine(data, color) {25     var maxNum = Math.max.apply(null, data);  //求数组中的最大值26     var padding = 20, //边距27         x0 = padding, //原点x轴坐标28         y0 = cv.height - padding, //原点y轴坐标29         xArrow_x = padding, //x轴箭头处坐标x30         xArrow_y = padding, //x轴箭头处坐标y31         yArrow_x = cv.width - padding, //y轴箭头处坐标x32         yArrow_y = cv.height - padding, //y轴箭头处坐标y33         arrowWidth = 10,  //箭头的宽度34         xLength = cv.width - 2*padding - arrowWidth,  //x轴的长度35         yLength = cv.height - 2*padding - arrowWidth, //y轴的长度36         pointsWidth = xLength/(data.length + 1);  //折线上每个点之间的距离37 38     ctx.beginPath();//控制绘制的折线不受坐标轴样式属性的影响39     //绘制x轴40     ctx.moveTo(x0, y0);41     ctx.lineTo(xArrow_x, xArrow_y);42     ctx.moveTo(xArrow_x, xArrow_y);43     ctx.lineTo(xArrow_x - arrowWidth, xArrow_y + arrowWidth);44     ctx.moveTo(xArrow_x, xArrow_y);45     ctx.lineTo(xArrow_x + arrowWidth, xArrow_y + arrowWidth);46 47     //绘制y轴48     ctx.moveTo(x0, y0);49     ctx.lineTo(yArrow_x, yArrow_y);50     ctx.moveTo(yArrow_x, yArrow_y);51     ctx.lineTo(yArrow_x - arrowWidth, yArrow_y - arrowWidth);52     ctx.moveTo(yArrow_x, yArrow_y);53     ctx.lineTo(yArrow_x - arrowWidth, yArrow_y + arrowWidth);54     ctx.strokeStyle = "#000";55 56     //中断(坐标轴和折线的)连接57     ctx.stroke();58     ctx.beginPath();59 60     //绘制折线61     for (var i = 0; i < data.length; i++) {62       var pointX = padding + (i + 1) * pointsWidth;63       var pointY = padding + arrowWidth + (1 - data[i]/maxNum) * yLength;64       ctx.lineTo(pointX, pointY);65     }66     ctx.strokeStyle = color;67     ctx.stroke();68   }69 </script>

效果图如下:




海岛旅游护照签证海岛旅游路线报价费用海岛旅游哪里好玩呢海岛旅游签证怎么办理海岛旅游去哪好东莞粤晖园钓鱼怎么收费?粤晖园渔具多少钱? 去这些全球色彩之地,找属于自己的颜色![六] 奇特的菲律宾瀑布餐厅 用餐请脱鞋 (图)[一十十] 新年首日 近5000名游客欢乐谷里喜迎中国年 哈尔滨松北区委书记刘臣带你了解松北(图) 哈尔滨平房区委书记于得志带你了解平房 广州长隆2015万圣节活动好玩吗?长隆万圣节具体活动时间表? 哈尔滨南岗区委书记王春生带你了解南岗 金沙大湿地公园门票多少钱?南海金沙大湿地公园怎么玩? 金沙大湿地公园烧烤多少钱?南海金沙大湿地公园游玩项目介绍? 南海金沙湿地公园好玩吗?金沙湿地公园一日游攻略? 客天下客家小镇吃饭多少钱?梅州客天下客家小镇有自助餐吗? 龙岗荷坳日月潭怎么样?荷坳日月潭有什么? 长隆水上乐园票退票吗?番禺长隆水上乐园是电子票吗? 惠州昆山峡森林海漂流地址?昆山峡森林海漂流在哪里? 义江缘停车收费吗?桂林义江缘停车方便吗? Q65110A7876 Datasheet Q65110A7876 Datasheet Q65110A7878 Datasheet Q65110A7878 Datasheet Q65110A7879 Datasheet Q65110A7879 Datasheet 2013广交会时间 2013广交会时间 2013广交会时间 爸爸去哪儿下一站 爸爸去哪儿下一站 爸爸去哪儿下一站 中国的情人节是哪天 中国的情人节是哪天 中国的情人节是哪天