# 前言
本文记录所学的一点可视化知识
数据可视化

Skia 是 Chrome 和 Android 的底层 2D 绘图引擎,Skia 采用 C++ 编程,由于它位于浏览器的更底层,所以我们平常接触较少。
OpenGL(Open Graphics Library)是2D、3D图形渲染库,它可以绘制从简单的2D图形到复杂的3D景象。OpenGL 常用于 CAD、VR、数据可视化和游戏等众多领域。
Chrome 使用 Skia 作为绘图引擎,向上层开放了 canvas、svg、WebGL、HTML 等绘图能力。
canvas
标签只是图形容器,相当于一个画布,canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成,相当于使用画笔在画布上画画。
1 2 3 4
| // 注意:必须指定宽高---canvas标签默认宽度与高度 300 * 150 // canvas标签的w|h务必通过canvas标签属性width|height设置 // 切记不能通过样式去设置画布的宽度与高度这样canvas的坐标体系会出现问题 <canvas id="charts" width="800" height="400"></canvas>
|
getContext()
1 2 3
| const canvas = document.getElementById('charts'); const context = canvas.getContext('2d');
|
绘制线段
- moveTo(x, y):把路径移动到画布中的指定点,不创建线条
- lineTo(x, y):添加一个新点,然后在画布中创建从该点到最后指定点的线条
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| //canvas标签任何操作务必通过JS完成 //通过JS当中"笔"去完成 let canvas = document.querySelector('canvas'); //获取画布的笔【上下文】 let ctx = canvas.getContext('2d'); //绘制线段:绘制线段的起点的设置 ctx.moveTo(100,100); //其他点的设置:可以有多个 ctx.lineTo(100,200); ctx.lineTo(200,100); //设置图形的填充的颜色 ctx.fillStyle = "red"; ctx.fill(); //设置线段的颜色与宽度 ctx.strokeStyle = "purple"; ctx.lineWidth="20" //可以设置起点与最终的结束点连接在一起 ctx.closePath(); //stroke方法绘制线段 ctx.stroke();
|
绘制矩形
- fillRect(x, y, width, height) 绘制填充颜色的矩形
- strokeRect(x, y, width, height) 绘制线条的矩形
1 2 3 4 5 6 7 8 9 10 11 12 13
| let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.strokeRect(100,200,100,200);
ctx.fillStyle = 'skyblue'; ctx.fill(); ctx.fillRect(300,200,100,200);
|
绘制圆形
arc(x, y, radius, starAngle, endAngle, anticlockwise)
- x : 圆心的 x 坐标
- y:圆心的 y 坐标
- radius : 半径
- starAngle :开始角度
- endAngle:结束角度
- anticlockwise :是否逆时针(true)为逆时针,(false)为顺时针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100,100,50,0,2 * Math.PI,true);
ctx.fillStyle = 'red'; ctx.fill();
ctx.stroke();
ctx.beginPath(); ctx.arc(200,200,50,0,1,true); ctx.stroke();
|
清除矩形与绘制文字
- fillText(text, x, y, maxWidth)
- clearRect(x, y, width, height)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <canvas width="600" height="400"></canvas>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.fillRect(100,200,100,200);
ctx.clearRect(100,200,50,100);
ctx.font="20px 微软雅黑"; ctx.fillStyle ='red';
ctx.fillText("数据可视化",50,20);
|
清除路径
清除绘画的路径,多个图形就不会连接在一起
1 2
| context.beginPath() context.closePath()
|
svg
SVG是一种基于XML的图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。
基本的SVG元素
- 包裹并定义整个矢量图。标签之于矢量图就如同标签之于一个 web 页面。
- 创建一条直线。
- 创建折线。
- 创建矩形。
- 创建圆。
- 创建圆和椭圆。
- 创建多边形。
- 通过指定点以及点和点之间的线来创建任意形状。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <!-- svg双闭合标签:默认宽度与高度300 * 150 svg绘制图形务必在svg标签内部使用绘制图形 --> <svg class="box"> <line x1="100" y1="100" x2="200" y2="200" stroke="red"></line> <line x1="100" y1="200" x2="200" y2="100" stroke="red"></line> <polyline points="300 300, 50 100, 120 400,20,20" fill-opacity="0" stroke="cyan"></polyline> <rect x="400" y="400" width="150" height="50" fill="pink"></rect> <circle cx='370' cy='95' r='50' style='stroke:cyan; fill:none'></circle>
<ellipse cx="500" cy="500" rx="100" ry="50" style="fill:black;"></ellipse> <polygon points="600 100, 300 400, 750 100" stroke="red" fill-opacity="0"/>
<path fill-opacity="0" stroke="skyblue" d=" M 10 10 L 20 400 L 30 120 L 40 66 L 50 99 L 60 120 L 70 99 Z "></path> </svg>
|
echarts
多系列混合
一个echarts 实例 可以包含多个图标,再series中可以写上多个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| series:[ { type:"bar", data:[], }, { type:'line', data:[] }, { type:'pie', data:[{name:'',value:10}] } ]
|
新特性:dataset
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| let dom = document.querySelector('div');
let mycharts = echarts.init(dom);
let data = [ ["衣服",10,22,'x',10], ["直播",12,55,'y',60], ["游戏",16,44,'z',50], ["电影",19,32,'t',70], ]
mycharts.setOption({ dataset:{ source:data }, title:{ text:'数据可视化', subtext:"echarts基本使用", textStyle:{ color:'cyan' }, left:'center' }, xAxis:{ data:["衣服",'直播','游戏','电影'] }, yAxis:{ axisLine:{ show:true }, axisTick:{ show:true } }, series:[ { type:"bar", color:'red', encdoe:{ y:1 } } , { type:'line', color:'pink', encode:{ y:2 } }, { type:'pie', encode:{ itemName:3, value:4 } } ] });
|
echarts组件

基本概念:定位、坐标系
定位:使用grid属性、坐标系:yAxis为数组写法(可有多个配置项)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| grid: [{ left: _left, top: _top, right: _right, bottom: _bottom }],
yAxis: [{ min: 0, max: 100 }, { min: 0, max: 100 }],
series: [ { type: 'bar', seriesLayoutBy: 'row', yAxisIndex: 0 }, { type: 'line', seriesLayoutBy: 'row', yAxisIndex: 1 } ]
|