11-canvas绘制折线图

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>11-Canvas绘制折线图</title>
  6     <style>
  7         *{
  8             margin: 0;
  9             padding: 0;
 10         }
 11         canvas{
 12             display: block;
 13             margin: 0 auto;
 14             background: red;
 15         }
 16     </style>
 17 </head>
 18 <body>
 19 <canvas width="500" height="400"></canvas>
 20 <script>
 21     // 1.拿到canvas
 22     let oCanvas = document.querySelector("canvas");
 23     // 2.从canvas中拿到绘图工具
 24     let oCtx = oCanvas.getContext("2d");
 25     // 3.定义变量保存小方格的尺寸
 26     let gridSize = 50;
 27     // 4.拿到canvas的宽高
 28     let canvasWidth = oCtx.canvas.width;
 29     let canvasHeight = oCtx.canvas.height;
 30     // 5.计算在垂直方向和水平方向可以绘制多少条横线
 31     let row = Math.floor(canvasHeight / gridSize);
 32     let col = Math.floor(canvasWidth / gridSize);
 33     // 6.绘制垂直方向的横线
 34     for(let i = 0; i < row; i++){
 35         oCtx.beginPath();
 36         oCtx.moveTo(0, i * gridSize - 0.5);
 37         oCtx.lineTo(canvasWidth, i * gridSize - 0.5);
 38         oCtx.strokeStyle = "#ccc";
 39         oCtx.stroke();
 40     }
 41     // 7.绘制水平方向的横线
 42     for(let i = 0; i < col; i++){
 43         oCtx.beginPath();
 44         oCtx.moveTo(i * gridSize - 0.5, 0);
 45         oCtx.lineTo(i * gridSize - 0.5, canvasHeight);
 46         oCtx.strokeStyle = "#ccc";
 47         oCtx.stroke();
 48     }
 49
 50     // 1.计算坐标系原点的位置
 51     let originX = gridSize;
 52     let originY = canvasHeight - gridSize;
 53     // 2.计算X轴终点的位置
 54     let endX = canvasWidth - gridSize;
 55     // 3.绘制X轴
 56     oCtx.beginPath();
 57     oCtx.moveTo(originX, originY);
 58     oCtx.lineTo(endX, originY);
 59     oCtx.strokeStyle = "#000";
 60     oCtx.stroke();
 61     // 4.绘制X轴的箭头
 62     oCtx.lineTo(endX - 10, originY + 5);
 63     oCtx.lineTo(endX - 10, originY - 5);
 64     oCtx.lineTo(endX, originY);
 65     oCtx.fill();
 66
 67     // 5.计算Y轴终点的位置
 68     let endY = gridSize;
 69     // 3.绘制Y轴
 70     oCtx.beginPath();
 71     oCtx.moveTo(originX, originY);
 72     oCtx.lineTo(originX, endY);
 73     oCtx.strokeStyle = "#000";
 74     oCtx.stroke();
 75     // 4.绘制X轴的箭头
 76     oCtx.lineTo(originX - 5, endY + 10);
 77     oCtx.lineTo(originX + 5, endY + 10);
 78     oCtx.lineTo(originX, endY);
 79     oCtx.fill();
 80
 81     // 1.拿到服务器返回数据
 82     let list = [
 83         {
 84             x: 100,
 85             y: 300
 86         },
 87         {
 88             x: 200,
 89             y: 200
 90         },
 91         {
 92             x: 300,
 93             y: 250
 94         },
 95         {
 96             x: 400,
 97             y: 100
 98         },
 99     ];
100     let dotSize = 20;
101     // 2.绘制数据点
102     for(let i = 0; i < list.length; i++){
103         oCtx.beginPath();
104         oCtx.moveTo(list[i].x - dotSize / 2, list[i].y - dotSize / 2);
105         oCtx.lineTo(list[i].x + dotSize - dotSize / 2, list[i].y - dotSize / 2);
106         oCtx.lineTo(list[i].x + dotSize - dotSize / 2, list[i].y + dotSize - dotSize / 2);
107         oCtx.lineTo(list[i].x - dotSize / 2, list[i].y + dotSize - dotSize / 2);
108         oCtx.closePath();
109         oCtx.fill();
110     }
111
112     // 1.绘制折线
113     oCtx.beginPath();
114     for(let i = 0; i < list.length; i++){
115         if(i === 0){
116             oCtx.moveTo(list[i].x, list[i].y);
117         }else{
118             oCtx.lineTo(list[i].x, list[i].y);
119         }
120     }
121     oCtx.strokeStyle = "blue";
122     oCtx.stroke();
123 </script>
124 </body>
125 </html>

原文地址:https://www.cnblogs.com/gsq1998/p/12166079.html

时间: 2024-07-29 13:00:15

11-canvas绘制折线图的相关文章

用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> 1

Android自定义控件 -Canvas绘制折线图(实现动态报表效果)

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图.先看看绘制的效果: 代码: public class MyView extends View { //坐标轴原点的位置 private int xPoint=60; private int yPoint=260; //刻度长度 private int xScale=8;  //8个单位构

Android自定义组件系列【9】——Canvas绘制折线图

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图.先看看绘制的效果: 实现原理很简单,我就直接给出代码: package com.example.testcanvasdraw; import java.util.ArrayList; import java.util.List; import java.util.Random; impo

canvas绘制折线图

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <canvas id="ca" width="300" height="300"></canvas

【Canvas】如何用Canvas绘制折线图

①设置构造函数 ②显示在画布上 ③为该构造函数添加方法 ④初始化 效果图: canvas { border: 1px solid #ccc } 原文地址:https://www.cnblogs.com/moveup/p/9735977.html

Morris.js和flot绘制折线图的比较

[文章摘要] 最近用开源的AdminLTE做框架感觉效果特别好,其针对图表库Morris.js和flot都提供了不错的支持,也都提供了这两者的例子.不过Morris.js是基于Raphael.js来的,也就是其使用SVG和VML来绘制图形,而flot则是使用Canvas进行绘制,在绘制效率和浏览器兼容性等方面会有出入,同时两者需要的数据格式也不相同.本文中对两者的使用和性能进行了比较. [文章索引] Morris.js的使用 flot的使用 性能比较 [一.Morris.js的使用] Morri

用h5中的canvas 绘制八卦图

1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>canvas绘制八卦图</title> 6 </head> 7 8 <body> 9 <canvas id="canvas" width="600" height="500"><

使用andbase开发框架实现绘制折线图

在Android中,当有绘制折线图的需求时,大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实可以实现折线图的功能,除此之外,我们还可以使用andbase开发框架里面的图表模块,实现图标的绘制.前面文章介绍了使用andbase开发框架实现侧滑栏效果,今天,我们学习如何实现折线的绘制. 首先,我们还是看一下效果图 我们模拟的是一家公司12个月中,两项不同业务的销售额变化,可以看到,效果还是非常不错的. 下面,我们开始介绍如何使用andbase实现这个效

JFreeChart绘制折线图实例

JFreeChart是JAVA平台上的一个开放的第三方图表绘制类库.只要下载JFreeChart的类库,导入项目即可使用.下面是一个绘制折线图的实例.各处注释都已经写的比较清晰了. 1 package com.mvc.controller; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 import javax.servlet.http.HttpServletRequest; 7