canvas绘制折线图

  • 2019-01-05 10:23:22
  • 4,322 次阅读
  • 稿源:天马行空

折线图无论是在日常工作中还是学习当中经常都能够被用到,因为它非常直观地反映出数据的变化趋势,而被人们广泛应用于各个行业和领域。大家都知道word和excel具有制作各种图表的功能,当然制作折线图也不在话下。但你是否尝试过用HTML5提供的画布(canvas)来绘制折线图呢?下面是代码实现的过程。

(1)折线图:

lineChart

(2)canvas绘图代码:

  1. var canvas = document.getElementById("demo");
  2.     canvas.width = 600;
  3.     canvas.height = 600;
  4.     canvas.style.border = "1px solid #000";
  5.     var ctx = canvas.getContext("2d");
  6.     var width = 20;
  7.     var height = 20;
  8.     var maxX = 400;
  9.     var maxY = 400;
  10.     for(var i = 1 ; i< canvas.width / width ; i ++){
  11.         ctx.beginPath();
  12.         ctx.moveTo( i * width , 0);
  13.         ctx.lineTo( i * width , canvas.height);
  14.         ctx.stroke();
  15.     }
  16.     for(var i = 1 ; i< canvas.height / height ; i ++){
  17.         ctx.beginPath();
  18.         ctx.moveTo( 0, i * height);
  19.         ctx.lineTo( canvas.width , i * height);
  20.         ctx.stroke();
  21.     }
  22.     var circle = {x0: 100 , y0: 500};
  23.     //绘制x轴
  24.     ctx.beginPath();
  25.     ctx.moveTo(circle.x0 , circle.y0)
  26.     ctx.lineTo(circle.x0 ,circle.y0 - maxY);
  27.     ctx.lineTo(100 - width/2 ,100 + height/2);
  28.     ctx.moveTo(100, 100)
  29.     ctx.lineTo(100 + width/2 , 100 + height/2);
  30.     ctx.lineWidth = 3;
  31.     ctx.strokeStyle = "red";
  32.     ctx.stroke();
  33.     //绘制y轴
  34.     ctx.beginPath();
  35.     ctx.moveTo(circle.x0 , circle.y0);
  36.     ctx.lineTo(circle.x0 + maxX , circle.y0 );
  37.     ctx.lineTo(circle.x0 + maxX - width/2 , circle.y0 - height/2);
  38.     ctx.moveTo(circle.x0 + maxX, circle.y0);
  39.     ctx.lineTo(circle.x0 + maxX - width/2 ,circle.y0 + height/2 );
  40.     ctx.lineWidth = 3;
  41.     ctx.strokeStyle = "blue";
  42.     ctx.stroke();
  43.     //通过给定的数据绘制出折线  每个占100的多少,如第一个占40%
  44.     var data = [40, 48, 50, 70, 60, 40, 20, 60, 80, 90];
  45.     //得到每一个点之间的距离
  46.     var widthX = maxX / data.length;//平均分成10份,每份占40
  47.     //开始绘制折线
  48.     ctx.beginPath();
  49.     ctx.moveTo(circle.x0, circle.y0);
  50.     for(var i = 0 ; i <=data.length ; i++){
  51.         ctx.lineTo(circle.x0 + (i +1 )* widthX, circle.y0 - data[i]/ 100 * maxY);
  52.         ctx.strokeStyle = "red";
  53.         ctx.stroke();
  54.     }

喜欢 2

文章评论 (0)

表情

大眼 可爱 大笑 坏笑 害羞 发怒 折磨 快哭了 大哭 白眼 晕 流汗 困 腼腆 惊讶 憨笑 色 得意 骷髅 囧 睡觉 眨眼 亲亲 疑问 闭嘴 难过 淡定 抗议 鄙视 猪头