用canvas绘制折线图
2018-06-24 00:27:39来源:未知 阅读 ()
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轴箭头处坐标x 30 xArrow_y = padding, //x轴箭头处坐标y 31 yArrow_x = cv.width - padding, //y轴箭头处坐标x 32 yArrow_y = cv.height - padding, //y轴箭头处坐标y 33 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>
效果图如下:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Web前端开发小白的学习建议和路线图 2020-05-20
- Vue 结合html2canvas和jsPDF实现html页面转pdf 2020-04-25
- Web前端绘制0.5像素的方法 2020-03-05
- Html5 Canvas动画基础碰撞检测的实现 2019-12-02
- CSS之border绘制三角形 2019-11-25
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash