博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【带着canvas去流浪(5)】绘制K线图
阅读量:5890 次
发布时间:2019-06-19

本文共 2161 字,大约阅读时间需要 7 分钟。

目录

1354575-20190402215208510-1789894718.jpg

示例代码托管在:

博客园地址:

华为云社区地址:

一. 任务说明

使用原生canvasAPI绘制K线图。(截图以及数据来自于百度Echarts官方示例库)。

1354575-20190402215220843-1335459327.png

二. 重点提示

K线图最常见的是在金融市场,尤其是股市中,它的绘制算法和表达的意思是直接相关的:

  1. 一般一个数据点包含开盘价,收盘价,当日最高价,当日最低价4个数据点。
  2. 开盘价低于收盘价时,当天为涨价,则图形为红色,反之则为绿色。
  3. 图形中间的细线是当日最高价当日最低价之间的连线。
  4. 图形中的矩形是在开盘价收盘价之间的范围。

了解了上述基本知识,K线图的绘制和折线图其实并没有太大区别,按部就班去绘制就好了。如果仔细观察Echarts官方提供的示例会发现图例中还有 MA5,MA10这样的图例标记,这里其实指的是N天的移动平均值Moving Average N,是减小数据波动性展示其宏观规律的常用方法之一,示例中的MA5就是指依次将源数据中每5个点的值求平均值作为当前点的数据(至于5个点是从当前点开始算,还是从当前点结束都是可以的)。

三. 示例代码

实现难度较低,本文不再赘述。

/*数据点来自于百度Echarts官方示例库* 每个数据点意义:[日期,开盘(open),收盘(close),最低(lowest),最高(highest)]* 例如: ['2013/2/7', 2430.69,2418.53,2394.22,2433.89],*//** * 绘制数据 */function drawData(options) {    let data = options.data;    let xLength = options.chartZone[2] - options.chartZone[0];    let c;//记录当前绘制点的颜色    let gap = xLength / options.xAxisLabel.length;    let activeX =  0;//记录绘制过程中当前点的坐标    let activeY =  0;//记录绘制过程中当前点的y坐标    context.strokeWidth = 2;    context.beginPath();    context.moveTo(options.chartZone[0],options.chartZone[3]);//先将起点移动至0,0坐标    for(let i = 0; i < data.length; i++){        //获取绘图颜色        c = getColor(data[i]);        context.strokeWidth = 1;        context.strokeStyle = context.fillStyle = c;        //计算绘制中心点x坐标        activeX = options.chartZone[0] + (i + 1) * gap;        //绘制最高最低线;        context.beginPath();        context.moveTo(activeX,transCoord(data[i][2]));        context.lineTo(activeX,transCoord(data[i][3]));        context.closePath();        context.stroke();        //绘制开盘收盘矩形        if (data[i][0] >= data[i][1]) {              context.fillRect(activeX - 5 , transCoord(data[i][0]) , 10, transCoord(data[i][1]) - transCoord(data[i][0]));        } else{           context.fillRect(activeX - 5 , transCoord(data[i][1]) , 10, transCoord(data[i][0]) - transCoord(data[i][1]));        }     }    }//根据K线图的数据中开盘价和收盘价计算绘图颜色function getColor(data) {    return data[0] >= data[1] ? '#1abc9c' : '#DA5961';}//从可视坐标系坐标转换为canvas坐标系坐标function transCoord(coord) {    return options.chartZone[3] - (options.chartZone[3] - options.chartZone[1])*(coord - options.yMin) / (options.yMax - options.yMin);}

浏览器中可查看效果:

1354575-20190402215233384-1858812743.png

转载于:https://www.cnblogs.com/dashnowords/p/10645679.html

你可能感兴趣的文章
mysql书外键_[转] mysql 外键(Foreign Key)的详解和实例
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
python入门小游戏代码_【Python】Python代码实现“FlappyBird”小游戏
查看>>
pytorch增加一维_pytorch 数据维度变换
查看>>
ie includes语法报错_HTML5基础:JS有哪些变态语法
查看>>
php的mysql的分区_详细介绍mysql中的分区
查看>>
云服务器怎么卸载mysql数据库_mysql 删除数据库脚本
查看>>
mysql 5.5.57互为主从_MYSQL 5.5.18 互为主从配置成功
查看>>
mysql5002_mysql新手进阶02
查看>>
python类 del_全面了解Python类的内置方法
查看>>
前后端传图片用base64好吗_前后端分离 前台传base64的图片 tp5.1.1进行处理
查看>>
java对象的排序_Java对象排序两种方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
java 生成对称密钥_java中以DES的方式实现对称加密并提供密钥的实例
查看>>
java hostwrite_一个RUNNABLE状态的线程hang在了java.io.FileOutputStream.writeBytes方法上
查看>>
计算机java语言答案_【计算机考试】JAVA语言,求答案!!!
查看>>
java web session管理_Java Web之会话管理二:Session
查看>>
java 面向对象基本概念_Java面向对象-面向对象编程之基本概念
查看>>
java数值保留2位小数_java中如何使Double类型的数值保留两位小数问题
查看>>