用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轴箭头处坐标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>

效果图如下:

时间: 2024-10-18 23:50:30

用canvas绘制折线图的相关文章

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

运用canvas绘折线图和柱状图

一.绘制折线图 1.首先,随便定义一个数组对象代表坐标,然后绘出打底的网格线: <canvas width="600px" height="400px" ></canvas> <script> var mycanvas=document.querySelector("canvas"); var pan=mycanvas.getContext("2d"); var wid=mycanvas.w

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

Python中使用matplotlib 如何绘制折线图?

本文和大家分享的主要是python开发中matplotlib 绘制折线图相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助. matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib# 如果是python2.7 执行如下命令 $ sudo apt-get install python-matplotlib# 如果你安装较新的Python,安装模块一乐

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