用html5绘制折线图的实例代码

2019-01-28 15:12:12王振洲
XML/HTML Code复制内容到剪贴板
  1. <html>     <canvas id="a_canvas" width="1000" height="700"></canvas>    
  2. <script>              
  3.                (function (){          
  4.         window.addEventListener("load", function(){          
  5.           var data = [100,-1000,0,700];          
  6.           // 获取上下文               var a_canvas = document.getElementById('a_canvas');    
  7.           var context = a_canvas.getContext("2d");          
  8.                 // 绘制背景    
  9.           var gradient = context.createLinearGradient(0,0,0,300);          
  10.                // gradient.addColorStop(0,"#e0e0e0");    
  11.           //gradient.addColorStop(1,"#ffffff");          
  12.                 context.fillStyle = gradient;    
  13.                 context.fillRect(0,0,a_canvas.width,a_canvas.height);    
  14.                     
  15.           // 描绘边框               var grid_cols = data.length + 1;    
  16.           var grid_rows = 4;               var cell_height = a_canvas.height / grid_rows;    
  17.           var cell_width = a_canvas.width / grid_cols;               context.lineWidth = 1;    
  18.           context.strokeStyle = "#a0a0a0";          
  19.           // 结束边框描绘               context.beginPath();    
  20.           // 准备画横线              /*for (var col = 0; col <= grid_cols; col++) {    
  21.             var x = col * cell_width;                 context.moveTo(x,0);    
  22.             context.lineTo(x,a_canvas.height);               }    
  23.           // 准备画竖线               for(var row = 0; row <= grid_rows; row++){    
  24.             var y = row * cell_height;                 context.moveTo(0,y);    
  25.             context.lineTo(a_canvas.width, y);               }*/    
  26.             //划横线                 context.moveTo(0,a_canvas.height/2);    
  27.             context.lineTo(a_canvas.width,a_canvas.height/2);                      
  28.             //画竖线               context.moveTo(0,0);    
  29.             context.lineTo(0,a_canvas.height);                  
  30.                         context.lineWidth = 1;    
  31.           context.strokeStyle = "#c0c0c0";               context.stroke();    
  32.                 var max_v =0;    
  33.                          for(var i = 0; i<data.length; i++){    
  34.               var d=0;                   if(data[i]<0)    
  35.               {dd=d-data[i];                       }    
  36.                   else{d=data[i];};                 if (d > max_v) { max_v =d};    
  37.           }               max_vmax_v = max_v * 1.1;    
  38.           // 将数据换算为坐标               var points = [];    
  39.           for( var i=0; i < data.length; i++){                 var v= data[i];    
  40.             var px = cell_width * (i +1);                 var py = a_canvas.height/2 - a_canvas.height*(v / max_v)/2;    
  41.             points.push({"x":px,"y":py});               }    
  42.           // 绘制折现               context.beginPath();    
  43.           context.moveTo(points[0].x, points[0].y);               for(var i= 1; i< points.length; i++){    
  44.             context.lineTo(points[i].x,points[i].y);               }    
  45.            
  46.           context.lineWidth = 2;               context.strokeStyle = "#8BA9FF";    
  47.           context.stroke();          
  48.           //绘制坐标图形               for(var i in points){    
  49.             var p = points[i];                 context.beginPath();    
  50.             context.arc(p.x,p.y,4,0,2*Math.PI);                 //实心圆    
  51.            /*                 context.fillStyle = "#000";*/    
  52.             //空心圆                 context.strokeStyle = "#000";    
  53.             context.stroke();                 context.fillStyle="white";    
  54.             context.fill();               }    
  55.           //添加文字               for(var i in points)    
  56.           {  var p = points[i];                 context.beginPath();    
  57.             context.fillStyle="black";                 context.fillText(data[i], p.x + 1, p.y - 15);    
  58.                                   }    
  59.         },false);           })();    
  60.                  
  61. </script>     </html>